访问python字典上的值时遇到问题,这些值在Django temp中也是字典

2024-09-28 21:57:18 发布

您现在位置:Python中文网/ 问答频道 /正文

传递给模板的字典不会产生任何值。你知道吗

我尝试过各种访问字典值的方法,甚至自定义过滤器,但都没有成功。你知道吗

你知道吗视图.py你知道吗

def home_view(request, location):
    cards = Site.objects.get(sites=location.upper()
                             ).site_cards.all().values('cards')
    vlans = json.load(open('allvendors/static/json/vlan.json'))
    vlans_location = vlans[location]

    home = {
        "site": location,
        "cards": cards,
        "vlans": vlans_location,
    }
    return render(request, 'allvendors/home.html', {"home": home})

所有供应商_过滤器.py你知道吗

from django import template

register = template.Library()

@register.filter(name='lookup')
def lookup(dictionary, key):
    return dictionary[key]

卡片

<QuerySet [{'cards': 'A'}, {'cards': 'B'}, {'cards': 'C'}, {'cards': 'D'}]>

VLAN\u位置

{
   'A':{
      'vlan':'101'
   },
   'B':{
      'vlan':'102'
   },
   'C':{
      'vlan':'103'
   },
   'D':{
      'vlan':'104'
   }
}

你知道吗主页.html你知道吗

{% load allvendors_filters %}
{% for card in home.cards %}
        <div class="card mb-4 box-shadow shadow">
            <div class="card-header">
                <h4 id="whatfor" class="my-0 font-weight-normal">{{ card|title }}</h4>
            </div>
            <div class="card-body">
                <h1 class="card-title pricing-card-title">Vlan:
                    <small class="text-muted">
                        <a href="#" target="_blank">
                            {{ home.vlans|lookup:card.cards }}
                        </a>
                    </small>
                </h1>
                <a class="text-decoration-none" href="{{ card|lower }}/">
                    <button id="seedata" type="button" class="btn btn-lg btn-block btn-outline-primary">See
                        Database</button>
                </a>
            </div>
        </div>
        {% endfor %}

问题本身就是{{card}},循环为每个卡1到3创建一个div,但是{{卡.vlan}}不会输出任何内容。你知道吗

我觉得我访问它的错误,但我不知道为什么或如何。你知道吗

欢迎任何指点。你知道吗

编辑

尝试重新考虑一下,使用了一个自定义过滤器:{主页.vlan|查找:card.cards}}为对应卡的值获取字典,字典本身是用html编写的:

 {'vlan': '101'} written in Card A
 {'vlan': '102'} written in Card B
...and so on

但如果尝试访问vlan,则会失败,并返回{主页.vlan|查找:card.cards.vlan}}-->;在“A”中查找键[vlan]失败

解决方案

在下面选定的答案中。你知道吗

谢谢


Tags: divjson过滤器home字典htmllocationcard
2条回答

这里有一个简单的答案,我认为你的for card in home.cards是在迭代dict键,如果你也想得到这个键,就用for card in home.cards.valuesfor card_key, card_dict in home.cards.items试试。你知道吗

数据:

home_dict = [{'A':'v1','B':'v2'},{'C':'v3','D':'v4'}]

Jinja迭代:

{% for dict in home_dict %}
   {% for key, value in dict.items %}
      <h1>Key: {{key}}</h1>
      <h2>Value: {{value}}</h2>
   {% endfor %}
{% endfor %}

注意: 确保你有dict项目的列表。你知道吗

相关问题 更多 >