Доступ к словарю по ключу в шаблоне Django
Я передаю словарь из моего представления в шаблон. Таким образом, {"key1":"value1","key2":"value2"}
передается и циклируется через ключ, пары значений прекрасны, однако я не нашел элегантного решения от доступа непосредственно в представлении от определенного ключа, например "key1"
, например, bu json.items [ "key1" ]. Я мог бы использовать некоторые операторы if/then, но я бы предпочел сделать это напрямую?
Вот код цикла в шаблоне html:
{% for key, value in json.items %}
<li>{{key}} - {{value}}</li>
{% endfor %}
Ответы
Ответ 1
Язык шаблонов Django поддерживает поиск ключей словаря следующим образом:
{{ json.key1 }}
См. документы-документы в переменные и поисковые запросы.
Язык шаблона не предоставляет способ отображения json[key]
, где key
- переменная. Вы можете написать шаблонный фильтр для этого, как это предложено в ответах на этот вопрос о переполнении стека.
Ответ 2
Чтобы преодолеть эту проблему, вы можете попробовать что-то вроде этого:
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 %}
Ответ 3
Например, чтобы отправить словарь ниже
dict = {'name':'myname','number':'mynumber'}
Просмотры:
return render(request, self.template_name, {'dict': dict})
Чтобы отобразить значение в шаблоне html:
<p>{{ dict.name }}</p>
Он печатает 'myname'