load tag 可以通过在 load
标签中设置文件来加载 内置 和 自定义 的 Django 模板标签和过滤器。
例如,要创建一个自定义的Django模板标签和过滤器的示例,需要在`core`文件夹中创建一个`templatetags`文件夹,并在其中放置一个名为`__init__.py`(空文件)和一个名为`custom_tags.py`的文件。这个`core`文件夹与`settings.py`所在的位置相同。然后不要忘记重新启动服务器,以应用`custom_tags.py`到Django项目中。对于`custom_tags.py`来说,其他名称也可以,根据我的实验,`custom_tags.py`可以不需要`__init__.py`(空文件),但基本上最好还是按照
文档所说,在`templatetags`文件夹下创建一个`__init__.py`(空文件)。
django-project
|-core
| |-settings.py
| └-templatetags # Here
| |-__init__.py
| └-custom_tags.py
|-templates
| └-index.html
|-app1
└-app2
并且,不要忘记在 settings.py
中将 core
设置为 INSTALLED_APPS
,以便将 custom_tags.py
应用到 Django 项目中,如下所示。*将 core
设置为 INSTALLED_APPS
还可以使用 python manage.py collectstatic
将 core
文件夹中的静态文件收集到根 Django 项目文件夹中。我建议在开始构建 Django 项目之前将 core
设置为 INSTALLED_APPS
:
INSTALLED_APPS = [
'core',
'app1',
'app2',
]
然后,在
custom_tags.py
中创建如下的
uppercase
和
lowercase
标签。*您可以查看
我的答案来解释
@register.simple_tag
:
from django.template import Library
register = Library()
@register.simple_tag
def uppercase(arg):
return arg.upper()
@register.filter
def lowercase(arg):
return arg.lower()
然后,您需要通过在加载标签时省略.py
来设置custom_tags
文件,以便使用如下所示的uppercase
和lowercase
标签:
# "templates/index.html"
{% load custom_tags %}
{% uppercase "Hello World" %} # HELLO WORLD
{{ "Hello World" | lowercase }} # hello world
而且,你还可以按照下面的方式创建文件夹,比如
app1
和
app2
,并在
templatetags
文件夹中添加
__init__.py
(空文件)和
custom_tags.py
。*其他名称也可以用于
app1
和
app2
文件夹,根据我的实验,如果没有
__init__.py
(空文件),
app1
和
app2
文件夹中的
custom_tags.py
将无法正常工作,因此必须在
app1
和
app2
文件夹的直接下级位置创建
__init__.py
(空文件):
django-project
|-core
| |-settings.py
| └-templatetags
| |-app1 # Here
| | |-__init__.py
| | └-custom_tags.py
| |-app2 # Here
| | |-__init__.py
| | └-custom_tags.py
| |-__init__.py
| └-custom_tags.py
|-templates
| └-index.html
|-app1
└-app2
然后,您需要在
load
标签中设置文件
custom_tags
,并按照
app1
和
app2
文件夹的顺序使用
app1/custom_tags.py
和
app2/custom_tags.py
中定义的标签,如下所示:
{% load custom_tags app1.custom_tags app2.custom_tags %}
而且,如果在多个文件中存在相同的标签,如下所示:
uppercase
。
@register.simple_tag
def uppercase(arg):
return arg.upper()
@register.simple_tag
def uppercase(arg):
return arg.upper() + " app1"
@register.simple_tag
def uppercase(arg):
return arg.upper() + " app2"
然后,使用在
load
标签中设置的最后一个文件集的
uppercase
标签。
# "templates/index.html"
# ↓ ↓ Here ↓ ↓
{% load custom_tags app1.custom_tags app2.custom_tags %}
{% uppercase "Hello World" %} # HELLO WORLD app2
最后,你可以通过多个应用文件夹
app1
和
app2
以及
core
文件夹来创建多个
templatetags
文件夹,如下所示:
django-project
|-core
| |-settings.py
| └-templatetags # Here
| |-__init__.py
| └-custom_tags.py
|-templates
| └-index.html
|-app1
| └-templatetags # Here
| |-__init__.py
| └-custom_tags.py
└-app2
└-templatetags # Here
|-__init__.py
└-custom_tags.py
然而,我建议只在core文件夹中创建一个templatetags文件夹,因为有以下三个原因:
1. 通过在core文件夹中管理一个templatetags文件夹比通过多个应用程序文件夹管理多个templatetags文件夹更容易。
2. 对于Django Admin,没有文件夹可以创建templatetags文件夹,所以在core文件夹中进行这样的操作是最合理的。
此外,第三个原因是,通过多个templatetags文件夹,如果存在多个相同名称的文件,如custom_tags.py:
django-project
|-core
| |-settings.py
| └-templatetags
| |-__init__.py
| └-custom_tags.py # Here
|-templates
| └-index.html
|-app1
| └-templatetags
| |-__init__.py
| └-custom_tags.py # Here
└-app2
└-templatetags # Here
|-__init__.py
└-custom_tags.py # Here
然后,在Django模板中只加载一个文件,但根据我的实验结果,我不知道应该加载哪个文件,如下所示:
{% load custom_tags %}