0

我正在尝试使用模板过滤器来运行一个循环,但我无法在同一个语句/模板中组合两个 python 语句。在模板中组合两个变量的正确方法是什么?请参阅下面的语法和解释:

我正在建立一个双索引的论坛,这意味着,我有一个 col-md-2 与类别列表。每个类别都有论坛,根据单击的类别,该类别的论坛会填充下一个 col-md-2。剩下的 col-md-8 根据选择的类别和论坛获取其内容。

我的逻辑:

我已经定义了一个加载类别列表的模板标签,无论加载哪个页面或选择哪个类别或论坛,它都不会改变。所以效果很好。但根据所选类别,我的第二列需要填充。为此,我正在尝试定义一个自定义过滤器(如下)。但是,我不确定如何使用它,因为它需要传递给另一个模板,它运行一个循环来呈现 html。即使我在这个模板中创建了 for 循环(而不是将其传递给另一个),我仍然需要做嵌套模板标签,例如:{% for forum in {{ forum.category|forumindexlistbycategory }} %}在任何一种情况下,我都会收到类型Invalid filter: 'forumindexlistbycategory'"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>
4

1 回答 1

3

所以你必须首先正确注册模板标签。

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 文件夹中。如果您没有此文件夹,则必须创建它。不要忘记__init__.py在您的 templatetags 文件夹中添加空文件。现在你可以在模板中使用它,所以:

{% load i18n forumindexlistbycat %}

注册模板标签后,您可以按其名称加载它。然后你像这样使用它:

{% include 'pybb/forumindex_list.html' with forum_list=forum.category|forumindexlistbycategory %}

检查更多信息 -自定义模板标签和过滤器指南。

于 2016-09-10T05:09:26.550 回答