Django模板中如何嵌套或联合使用两个模板标签?
How to nest or jointly use two template tags in Django templates?
我正在尝试使用模板过滤器来执行 运行 循环,但我无法在同一个 statement/template 中组合两个 python 语句。在模板中组合两个变量的正确方法是什么?请参阅下面的语法和解释:
我正在构建一个带有双索引的论坛,也就是说,我有一个带有类别列表的 col-md-2。每个类别都有论坛,根据单击哪个类别,该类别的论坛会填充下一个 col-md-2。剩余的 col-md-8 根据选择的类别和论坛获取其内容。
我的逻辑:
我已经定义了一个加载类别列表的模板标签,无论加载哪个页面或选择哪个类别或论坛,它都不会改变。所以效果很好。但是根据所选类别,我的第二列需要填充。为此,我试图定义一个自定义过滤器(如下)。但是,我不确定如何使用它,因为它需要传递给另一个模板,在该模板中它 运行 是一个循环来呈现 html。即使我在这个模板中创建了 for 循环(而不是将它传递给另一个),我仍然需要做嵌套的模板标签,比如: {% for forum in {{ forum.category|forumindexlistbycategory }} %}
在任何一种情况下,我都会得到类型为 [=13 的错误=] 或 "with" in u'include' tag needs at least one keyword argument
.
我在 pybb_tags.py 中定义了以下自定义模板过滤器:
from pybb.models import Forum
@register.filter
def forumindexlistbycat(category):
forumlistbycat = Forum.objects.filter(category=category)
return forumlistbycat
在我的模板中,我尝试按如下方式加载它:
{% load i18n pybb_tags %}
<div class='category'>
{% if category %}
<h3>{{ category }}</h3>
{% include 'pybb/forumindex_list.html' with forum_list=category.forums_accessed category=category parent_forum='' %}
{% else %}
<h3>{{ forum.category }}</h3>
{% include 'pybb/forumindex_list.html' with forum_list= %}{{ forum.category|forumindexlistbycategory }}
{% endif %}
</div>
所以你必须先正确注册模板标签。
from django import template
from pybb.models import Forum
register = template.Library()
@register.filter
def forumindexlistbycat(category):
forumlistbycat = Forum.objects.filter(category=category)
return forumlistbycat
将上面的代码放在名为您的过滤器的文件中,因此 forumindexlistbycat.py
并将此文件移动到您应用中的 templatetags 文件夹。如果您没有此文件夹,则必须创建它。不要忘记在您的 templatetags 文件夹中添加空文件 __init__.py
。现在您可以在模板中使用它了,所以:
{% load i18n forumindexlistbycat %}
注册模板标签后,您可以通过名称加载它。
然后你像这样使用它:
{% include 'pybb/forumindex_list.html' with forum_list=forum.category|forumindexlistbycategory %}
我正在尝试使用模板过滤器来执行 运行 循环,但我无法在同一个 statement/template 中组合两个 python 语句。在模板中组合两个变量的正确方法是什么?请参阅下面的语法和解释:
我正在构建一个带有双索引的论坛,也就是说,我有一个带有类别列表的 col-md-2。每个类别都有论坛,根据单击哪个类别,该类别的论坛会填充下一个 col-md-2。剩余的 col-md-8 根据选择的类别和论坛获取其内容。
我的逻辑:
我已经定义了一个加载类别列表的模板标签,无论加载哪个页面或选择哪个类别或论坛,它都不会改变。所以效果很好。但是根据所选类别,我的第二列需要填充。为此,我试图定义一个自定义过滤器(如下)。但是,我不确定如何使用它,因为它需要传递给另一个模板,在该模板中它 运行 是一个循环来呈现 html。即使我在这个模板中创建了 for 循环(而不是将它传递给另一个),我仍然需要做嵌套的模板标签,比如: {% for forum in {{ forum.category|forumindexlistbycategory }} %}
在任何一种情况下,我都会得到类型为 [=13 的错误=] 或 "with" in u'include' tag needs at least one keyword argument
.
我在 pybb_tags.py 中定义了以下自定义模板过滤器:
from pybb.models import Forum
@register.filter
def forumindexlistbycat(category):
forumlistbycat = Forum.objects.filter(category=category)
return forumlistbycat
在我的模板中,我尝试按如下方式加载它:
{% load i18n pybb_tags %}
<div class='category'>
{% if category %}
<h3>{{ category }}</h3>
{% include 'pybb/forumindex_list.html' with forum_list=category.forums_accessed category=category parent_forum='' %}
{% else %}
<h3>{{ forum.category }}</h3>
{% include 'pybb/forumindex_list.html' with forum_list= %}{{ forum.category|forumindexlistbycategory }}
{% endif %}
</div>
所以你必须先正确注册模板标签。
from django import template
from pybb.models import Forum
register = template.Library()
@register.filter
def forumindexlistbycat(category):
forumlistbycat = Forum.objects.filter(category=category)
return forumlistbycat
将上面的代码放在名为您的过滤器的文件中,因此 forumindexlistbycat.py
并将此文件移动到您应用中的 templatetags 文件夹。如果您没有此文件夹,则必须创建它。不要忘记在您的 templatetags 文件夹中添加空文件 __init__.py
。现在您可以在模板中使用它了,所以:
{% load i18n forumindexlistbycat %}
注册模板标签后,您可以通过名称加载它。 然后你像这样使用它:
{% include 'pybb/forumindex_list.html' with forum_list=forum.category|forumindexlistbycategory %}