辞書をビューからテンプレートに渡します。そう {"key1":"value1","key2":"value2"}
が渡され、キーをループします。値のペアは問題ありませんが、"key1"
たとえばbu json.items ["key1"]。いくつかのif/thenステートメントを使用できますが、直接方法がありますか?
Htmlテンプレートのループコードは次のとおりです。
{% for key, value in json.items %}
<li>{{key}} - {{value}}</li>
{% endfor %}
Djangoテンプレート言語は、次のように辞書キーの検索をサポートしています。
{{ json.key1 }}
変数とルックアップ のテンプレートドキュメントを参照してください。
テンプレート言語は、json[key]
を表示する方法を提供しません。ここで、key
は変数です。 Stack Overflow question の回答で提案されているように、これを行うテンプレートフィルターを作成できます。
たとえば、以下の辞書_dict = {'name':'myname','number':'mynumber'}
_を送信するには
ビュー:return render(request, self.template_name, {'dict': dict})
HTMLテンプレートで値をレンダリングするには:_<p>{{ dict.name }}</p>
_
_'myname'
_を出力します
@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 %}
この問題を克服するには、次のようなものを試すことができます。
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 %}