我需要创建一个自定义标签,返回一个列表,然后我可以使用{% 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')
Run Code Online (Sandbox Code Playgroud)
在模板中,我不能all_products直接使用,但需要先分配给某个变量:
{% all_products as all_products_list %}
{% if all_products_list %}
{% for product in all_products_list %}
...
{% endfor %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
是否有必要对临时变量进行赋值?不能直接与其他标签助手一起使用吗?
这对我来说看起来非常好。
或者,出于某种原因,如果您无法通过product_list视图的上下文,如果您觉得更简洁,可以使用包含标签:
@register.inclusion_tag("tags/products_list.html")
def all_products():
return {'products_list': Product.objects.order_by('name') }
Run Code Online (Sandbox Code Playgroud)
products_list.html
{% for product in products_list %}
.........
{% empty %}
Empty list
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
在 html 文件中,你只需要做
{% all_products %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3513 次 |
| 最近记录: |