簡體   English   中英

Django 自定義模板標簽未在循環中呈現

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM