0

概括

我一直在尝试让自定义标签在 Django 中工作,但似乎无法正确注册。

索引文件看起来可以正确加载,它只是抱怨标签没有正确注册。

我现在所做的只是将我在 django 安装的应用程序部分中的应用程序中注册标签的 .py 文件放在其中。

我应该做其他事情来确保标签正确注册吗?


更多信息

我得到的错误:

第 1 行的块标记无效:“show_loans”。您是否忘记注册或加载此标签?

我调用标签的视图

索引.html

{% show_loans %}

我尝试注册标签的python文件

贷款表.py

from .models import Loan
from datetime import datetime
from django import template

register = template.Library()

@register.simple_tag('loansTable.html')
def show_loans():
    l1 = Loan()
    l2 = Loan()
    l1.loanedDate_date = datetime.now
    l2.handinDate_date = datetime.now
    l2.loanedDate_date = datetime.now
    l2.handinDate_date = datetime.now
    loans2 =    { l1, l2 }
    return {'loans': loans2}

贷款表.html

<ul>
    {% for loan in loans %}
        <li> {{ loan }} </li>
    {% endfor %}
</ul>

文件夹结构:

-app
--templates
---customTemplates
----index.html
----loansTable.html
--loansTable.py

谢谢你的帮助。

4

2 回答 2

2

您无需将标签注册到模板。你只需要从那里加载它。你已经在做什么了。

因此只需替换:

@register.simple_tag('loansTable.html')

有了这个:

@register.simple_tag

您还需要将自定义标签放在templatetags目录中。从文档:

在您的index.html中,您必须按已注册模板标签的文件名加载模板标签。 即,如果您在custom_tags.py文件中注册了标签

{% load custom_tags %}

该应用程序应包含一个模板标签目录,与 models.py、views.py 等处于同一级别。如果不存在,请创建它 - 不要忘记init .py 文件以确保该目录被视为一个 Python 包。

于 2019-02-24T10:27:17.120 回答
1

该错误告诉您确切的问题:您没有在使用它的模板(即 index.html)中加载标签。

{% load loansTable %}
{% show_loans %}

此外,您混淆了标签类型。呈现另一个模板的标签称为包含标签,因此您应该在注册它时使用它:

@register.inclusion_tag('loansTable.html')
def show_loans():
    ...
于 2019-02-24T11:33:47.510 回答