当前位置:  开发笔记 > 后端 > 正文

Django - 如何在该项目中的所有应用程序之间共享项目范围的模板标签

如何解决《Django-如何在该项目中的所有应用程序之间共享项目范围的模板标签》经验,为你挑选了2个好方法。

第二次询问更多细节......

我想有一个项目范围的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.



1> mipadi..:

我不知道这是否是正确的方法,但在我的Django应用程序中,我总是将常用模板标签放在lib"app"中,如下所示:

proj/
    __init__.py
    lib/
        __init__.py
        templatetags/
            __init__.py
            common_tags.py

只需确保将lib应用添加到您的列表INSTALLED_APPS中即可settings.py.


`common`或`commons`也可能是一个好名字.
我通常在项目之后命名应用程序:"project_core" - 但是同样的解决方案.

2> David Viktor..:

从Django 1.9开始,不再需要common像其他人提到的那样创建额外的应用程序.所有你需要做的是一个路径项目中添加templatetags目录到settings.pyOPTION['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',
    },
}


为了更清楚,在调用此标记的模板html中,在使用`{%common_extras%}`正常调用标记之前,首先需要`{%load project_tags%}`.
推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有