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 回答
0

常见的方法是简单地all_products从视图上下文中的控制器传递。

于 2019-09-02T14:49:04.460 回答