[英]Django custom template-tag not rendered in loop
我的自定義標簽:
# app/templatetags/ctags.py
def getgenre():
genre = ["Test1", "Test2"]
return genre
register.simple_tag(getgenre)
我的html:
# app/templates/base.html
{% load ctags %}
<!-- {% getgenre %} -->
{% for genre in getgenre %}
<li>{{genre}}</li>
{% endfor %}
這為我呈現了一個空白頁面。 如果我取消注釋 {% getgenre %},django 會按預期呈現 ["Test1", "Test2"]。 我嘗試了無數種設置標簽的變體(包括非 simple_tag 方式),但都無濟於事。 我根本無法迭代我的自定義標簽之一返回的任何值。
我在這里錯過了一些基本的東西嗎?
您應該使用assignment_tag
而不是simple_tag
:
@register.assignment_tag
def getgenre():
genre = ["Test1", "Test2"]
return genre
然后在模板中:
{% load ctags %}
{% getgenre as genre_list %}
{% for genre in genre_list %}
<li>{{genre}}</li>
{% endfor %}
自定義標簽寫入任何應用程序中的 base.py
from django import template
register = template.Library()
@register.inclusion_tag('templte/genre.html')
def getgenre():
genre = ["Test1", "Test2"]
return genre
然后是模板genre.html
{% load ctags %}
{% for genre in genre_list %}
<li>{{genre}}</li>
{% endfor %}
因為@register.assignment_tag
在Django >= 1.9 之后被刪除了。 就像鏈接中所說的“ simple_tag()
助手已經獲得了同樣的能力” 。 是的,但至少在我的情況下不適用於 for 循環。
register.simple_tag
實例使用register.filter
裝飾器(參考) 。
@register.filter
def getgenre(arg=None):
genre = ["Test1", "Test2"]
return genre
在模板(.html) 中:
{% load ctags %}
{% for genre in ""|genre_list %}
<li>{{genre}}</li>
{% endfor %}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.