Django 模板语言支持查找字典键,如下所示:
{{ json.key1 }}
请参阅 variables and lookups 上的模板文档。
模板语言不提供显示 json[key]
的方法,其中 key
是一个变量。您可以编写一个模板过滤器来执行此操作,如此 Stack Overflow question 的答案中所建议的那样。
正如@Alasdair 建议的那样,您可以使用模板过滤器。在您的 templatetags
目录中,创建以下文件 dict_key.py
:
from django.template.defaultfilters import register
@register.filter(name='dict_key')
def dict_key(d, k):
'''Returns the given key from a dictionary.'''
return d[k]
然后,在您的 HTML 中,您可以编写:
{% for k in json.items %}
<li>{{ k }} - {{ json.items|dict_key:k }}</li>
{% endfor %}
.get
以便如果密钥不存在,它不会返回任何内容。如果你做 dictionary[key]
它会引发一个 KeyError
然后
例如,发送以下字典 dict = {'name':'myname','number':'mynumber'}
观看次数:return render(request, self.template_name, {'dict': dict})
要在 html 模板中呈现值:<p>{{ dict.name }}</p>
它打印 'myname'
为了克服这个问题,你可以尝试这样的事情:
def get_context_data(self, **kwargs):
context['cart'] = []
cart = Cart()
cart.name = book.name
cart.author = book.author.name
cart.publisher = book.publisher.name
cart.price = 123
cart.discount = 12
cart.total = 100
context['cart'].append(cart)
return context
class Cart(object):
"""
Cart Template class
This is a magic class, having attributes
name, author, publisher, price, discount, total, image
You can add other attributes on the fly
"""
pass
By this way you can access your cart something like this:
{% for item in cart %}
<div class="jumbotron">
<div>
<img src="{{item.image}}" />
<div class="book_name"> <b>{{item.name}}</b></div>
<div class="book_by"><i>{{item.author}}</i></div>
<span>Rs. {{item.price}}</span> <i>{{item.discount}}% OFF </i>
<b>Rs. {{item.total}}</b>
{% endfor %}
blocktrans
,它不允许点符号。{% blocktrans with json.key1 as mykey %} {{ mykey }} {% endblocktrans %}