【问题标题】:How to nest or jointly use two template tags in Django templates?如何在 Django 模板中嵌套或联合使用两个模板标签?
【发布时间】:2017-01-18 06:05:15
【问题描述】:

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

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

我的逻辑:

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

我在 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>

【问题讨论】:

    标签: python django django-templates django-template-filters templatetags


    【解决方案1】:

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

    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。现在你可以在模板中使用它了,所以:

    {% load i18n forumindexlistbycat %}
    

    当您的模板标签被注册时,您可以通过它的名称加载它。 然后你像这样使用它:

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

    查看更多信息 - Guide on Custom template tags and filters.

    【讨论】:

    • 嗨。包含此自定义过滤器的自定义模板标签文件的名称是 pybb_tags.py,因此我尝试了 {% load i18n pybb_tags forumindexlistbycat %}{% load i18n pybb_tags %}{% load i18n pybb_tags %} {% forumindexlistbycat as forumindexlistbycategory %} 中的每一个,但每次都出现以下两个错误:Invalid block tag on line 2: 'forumindexlistbycat'. Did you forget to register or load this tag? 或 @987654331 @。我认为您的语法可能是正确的,但是如何正确将此过滤器加载到我的模板中?
    • 尝试将您的标签文件命名为您的过滤器,并将其放在您的应用程序目录中的“templatetags”文件夹中。所以它的路径像'../app/templatetags/forumindexlistbycat.py'
    • 在您的模板标签文件夹中添加空文件__init__.py
    • 如果还是有问题,请尝试重启runserver
    • 嘿,谢谢,它现在可以工作了。如果我在这方面需要更多帮助,我仍然会在这个线程上添加评论,因为我现在正在处理它,但作为感谢,我会将你的答案添加为已接受。 :-)
    猜你喜欢
    • 1970-01-01
    • 2012-07-09
    • 2010-09-20
    • 2014-03-20
    • 2022-11-25
    • 2011-09-17
    • 2011-10-07
    • 2011-12-15
    • 2011-06-15
    相关资源
    最近更新 更多