自定义django标签返回列表?

时间:2013-07-24 14:40:33

标签: python django

我需要创建一个自定义标记,返回一个列表,然后我可以使用{% 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 %}

是否有必要对临时变量进行赋值?不能直接与其他标签助手一起使用吗?

2 个答案:

答案 0 :(得分:4)

这对我来说非常好。

或者,出于某种原因,如果您无法通过视图的上下文传递product_list,如果您觉得更干净,则可以使用inclusion tag

@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 %}

答案 1 :(得分:0)

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