6

リストを返すカスタム タグを作成する必要があります{% for item in custom_tag_returning_list %}

今、私はassign_tagメソッドを使用して次のハックを作成しましたが、それが正しい方法であるかどうかは疑問です:

from django import template
from product.models import Product

register = template.Library()

@register.assignment_tag
def all_products():
    return Product.objects.all().order_by('name')

テンプレートでは、all_products直接使用することはできませんが、最初にいくつかの変数に割り当てる必要があります:

{% all_products as all_products_list %}
{% if all_products_list %}
  {% for product in all_products_list %} 
   ...
  {% endfor %}
{% endif %}

一時変数への割り当てを行う必要がありますか? 他のタグ ヘルパーで直接使用できませんか?

4

2 に答える 2

6

これは私にはまったく問題ないように見えます。

または、何らかの理由product_listでビューのコンテキストを通過できない場合、よりクリーンだと思われる場合は包含タグを使用できます。

@register.inclusion_tag("tags/products_list.html")
def all_products():
    return {'products_list': Product.objects.order_by('name') }

products_list.html

{% for product in products_list %} 
   .........
{% empty %}
  Empty list
{% endfor %}

そしてhtmlファイルでは、あなたはただやります

{% all_products %}
于 2013-07-24T14:54:23.610 に答える