I'm lewat sebuah kamus dari pandangan saya ke sebuah template. Jadi {"key1":"value1","key2":"value2"}
dilewatkan dalam dan perulangan melalui kunci,nilai pasangan baik-baik saja, namun saya've tidak ditemukan solusi yang elegan dari akses langsung di lihat dari kunci tertentu, katakanlah "key1"
misalnya bu json.barang-barang yang["key1"]. Saya bisa menggunakan beberapa jika/kemudian pernyataan, tapi saya'd suka melakukan secara langsung apakah ada cara?
Berikut ini adalah perulangan dalam kode html template:
{% for key, value in json.items %}
<li>{{key}} - {{value}}</li>
{% endfor %}
Django template bahasa mendukung mencari kamus tombol sebagai berikut:
{{ json.key1 }}
Lihat template dokumen pada variabel dan lookup.
Template bahasa tidak menyediakan cara untuk menampilkan json[key]
, di mana key
adalah variabel. Anda dapat menulis sebuah template filter untuk melakukan hal ini, seperti yang disarankan dalam jawaban ini Stack Overflow pertanyaan.
Misalnya, untuk mengirim di bawah ini kamus
dict = {'nama':'myname','nomor':'mynumber'}
views :
kembali render(permintaan, mandiri.template_name, {'dict': dict})
Untuk membuat nilai di html template:
<p>{{ dict.nama }}</p>
Mencetak 'myname'
Untuk mengatasi masalah ini anda bisa mencoba sesuatu seperti ini:
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 %}
Seperti @Alasdair menunjukkan, anda dapat menggunakan template filter.
Di templatetags
directory, membuat file berikut 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]
Kemudian, dalam HTML anda, anda dapat menulis:
{% for k in json.items %}
<li>{{ k }} - {{ json.items|dict_key:k }}</li>
{% endfor %}