默认情况下为所有视图加载Django模板标记库

Tom*_*rle 49 django django-templates

我有一个小的排版相关的模板标签库,几乎每个页面都使用它.现在我需要为每个模板加载它

{% load nbsp %}
Run Code Online (Sandbox Code Playgroud)

有没有办法一次性"全局"加载所有视图和模板?将加载标记放入基本模板不起作用.

Dan*_*man 71

有一种add_to_builtins方法django.template.loader.只需传递templatetags模块的名称(作为字符串).

from django.template.loader import add_to_builtins

add_to_builtins('myapp.templatetags.mytagslib')
Run Code Online (Sandbox Code Playgroud)

现在mytagslib可以在任何模板中自动使用.

  • 请注意,虽然你可以做到这一点,但很可能你会在某些时候后悔(我已经做过了,后悔了).它使您的模板不可移植到任何其他没有add_to_builtins的项目,并且它可以破坏渲染这些模板的测试(除非您确保测试运行器也运行add_to_builtins).总而言之,它使得事物变得更加脆弱,以获得非常小的便利. (25认同)
  • 更不用说任何新的开发人员都会被你使用标准库中不存在的标记所困扰,直到他们问你(如果你还在身边)或偶然发现它.:)记住,显式优于隐式. (20认同)

pba*_*icz 31

它将随着Django 1.9的发布而改变.

从1.9开始,正确的方法是在builtins键下配置模板标签和过滤器OPTIONS- 请参阅下面的示例:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'builtins': ['myapp.builtins'],
        },
    },
]
Run Code Online (Sandbox Code Playgroud)

详细信息:https: //docs.djangoproject.com/en/dev/releases/1.9/#django-template-base-add-to-builtins-is-removed


bsa*_*sao 27

在django 1.7中只需更换 from django.template.base import add_to_builtins

  • 为什么选择downvote?这节省了我的一天,因为接受的答案已经过时了!Django 1.7中的导入路径已更改.谢谢bsao! (3认同)
  • 这应该是对[现有答案](http://stackoverflow.com/a/1185049/1075247)的评论还是编辑?它本身没有意义。 (2认同)

kar*_*eek 5

在Django 1.9中,有一个libraries标签字典和模板标签模块的点缀Python路径,用于向模板引擎注册.这可用于添加新库或为现有库提供备用标签.

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            'libraries': { # Adding this section should work around the issue.
                'custom_tags' : 'myapp.templatetags.custom_tags',#to add new tags module.
                'i18n' : 'myapp.templatetags.custom_i18n', #to replace exsiting tags modile
            },
        },
    },
]
Run Code Online (Sandbox Code Playgroud)