Подтвердить что ты не робот

Доступ к словарю по ключу в шаблоне Django

Я передаю словарь из моего представления в шаблон. Таким образом, {"key1":"value1","key2":"value2"} передается и циклируется через ключ, пары значений прекрасны, однако я не нашел элегантного решения от доступа непосредственно в представлении от определенного ключа, например "key1", например, bu json.items [ "key1" ]. Я мог бы использовать некоторые операторы if/then, но я бы предпочел сделать это напрямую?

Вот код цикла в шаблоне html:

{% for key, value in json.items %} 
  <li>{{key}} - {{value}}</li>
 {% endfor %}
4b9b3361

Ответ 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'