在 Django 中正确使用自定义标签时遇到问题
Trouble using a custom tag correctly with Django
总结
我一直在尝试让自定义标签在 Django 中工作,但似乎无法正确注册。
索引文件看起来加载正确,只是抱怨标签没有正确注册。
我现在所做的只是将 .py 文件放在我在 django 安装的应用程序部分的应用程序中注册标签的位置。
我是否应该做其他事情来确保标签正确注册?
更多信息
我得到的错误:
Invalid block tag on line 1: 'show_loans'. Did you forget to register
or load this tag?
我调用标签的视图
index.html
{% show_loans %}
我尝试注册标签的 python 文件
loansTable.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}
loansTable.html
<ul>
{% for loan in loans %}
<li> {{ loan }} </li>
{% endfor %}
</ul>
文件夹结构:
-app
--templates
---customTemplates
----index.html
----loansTable.html
--loansTable.py
感谢您的帮助。
您不需要将标签注册到模板。你只需要从那里加载它。你已经在做了。
因此只需替换:
@register.simple_tag('loansTable.html')
有了这个:
@register.simple_tag
您还需要将自定义标签放在 templatetags
目录中。来自文档:
在您的 index.html 中,您必须通过注册模板标签的文件名加载模板标签。
即如果您在 custom_tags.py
文件
中注册了标签
{% load custom_tags %}
The app should contain a templatetags directory, at the same level as models.py, views.py, etc. If this doesn’t already exist, create it - don’t forget the init.py file to ensure the directory is treated as a Python package.
该错误准确地告诉您出了什么问题:您没有在模板中使用它的地方加载标签,即 index.html。
{% load loansTable %}
{% show_loans %}
此外,您混淆了代码类型。呈现另一个模板的标签称为包含标签,因此您应该在注册时使用它:
@register.inclusion_tag('loansTable.html')
def show_loans():
...
总结
我一直在尝试让自定义标签在 Django 中工作,但似乎无法正确注册。
索引文件看起来加载正确,只是抱怨标签没有正确注册。
我现在所做的只是将 .py 文件放在我在 django 安装的应用程序部分的应用程序中注册标签的位置。
我是否应该做其他事情来确保标签正确注册?
更多信息
我得到的错误:
Invalid block tag on line 1: 'show_loans'. Did you forget to register or load this tag?
我调用标签的视图
index.html
{% show_loans %}
我尝试注册标签的 python 文件
loansTable.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}
loansTable.html
<ul>
{% for loan in loans %}
<li> {{ loan }} </li>
{% endfor %}
</ul>
文件夹结构:
-app
--templates
---customTemplates
----index.html
----loansTable.html
--loansTable.py
感谢您的帮助。
您不需要将标签注册到模板。你只需要从那里加载它。你已经在做了。
因此只需替换:
@register.simple_tag('loansTable.html')
有了这个:
@register.simple_tag
您还需要将自定义标签放在 templatetags
目录中。来自文档:
在您的 index.html 中,您必须通过注册模板标签的文件名加载模板标签。
即如果您在 custom_tags.py
文件
{% load custom_tags %}
The app should contain a templatetags directory, at the same level as models.py, views.py, etc. If this doesn’t already exist, create it - don’t forget the init.py file to ensure the directory is treated as a Python package.
该错误准确地告诉您出了什么问题:您没有在模板中使用它的地方加载标签,即 index.html。
{% load loansTable %}
{% show_loans %}
此外,您混淆了代码类型。呈现另一个模板的标签称为包含标签,因此您应该在注册时使用它:
@register.inclusion_tag('loansTable.html')
def show_loans():
...