第二次询问更多细节......
我想有一个项目范围的templagetags目录,以便所有应用程序使用通用标记,然后每个应用程序都可以拥有自己的标记,如果需要的话.
让我说我有:
proj1/app1 proj1/app1/templatetags/app1_tags.py proj1/app2 proj1/app2/templatetags/app2_tags.py proj1/templatetags/proj1_tags.py proj1/templates/app1/base.html proj1/templates/app1/index.html proj1/templates/app2/base.html proj1/templates/app2/index.html
哪里:
proj1/templates/app1/base.html ----------- {% load proj1_tags %} {% load app1_tags %} proj1/templates/app1/index.html ----------- {% extends "base.html" %} proj1/templates/app2/base.html ----------- {% load proj2_tags %} {% load app2_tags %} proj1/templates/app2/index.html ----------- {% extends "base.html" %}
这会有用吗?它对我不起作用.它无法找到要加载的proj1_tags.
我不知道这是否是正确的方法,但在我的Django应用程序中,我总是将常用模板标签放在lib
"app"中,如下所示:
proj/ __init__.py lib/ __init__.py templatetags/ __init__.py common_tags.py
只需确保将lib
应用添加到您的列表INSTALLED_APPS
中即可settings.py
.
从Django 1.9开始,不再需要common
像其他人提到的那样创建额外的应用程序.所有你需要做的是一个路径项目中添加templatetags
目录到settings.py
的OPTION['libraries']
字典.
之后,这些标签将在整个项目中可访问.该templatetags
文件夹可以放在您需要的任何位置,也可以有不同的名称.
来自Django文档的自定义示例:
OPTIONS={ 'libraries': { 'myapp_tags': 'path.to.myapp.tags', 'project_tags': 'project.templatetags.common_extras', 'admin.urls': 'django.contrib.admin.templatetags.admin_urls', }, }