Django 自定义模板标签和模板加载器
Posted
技术标签:
【中文标题】Django 自定义模板标签和模板加载器【英文标题】:Django custom template tags and template loaders 【发布时间】:2010-11-15 09:28:50 【问题描述】:[我在http://groups.google.com/group/django-users/browse_thread/thread/989c569d5118980d]有这个讨论
是 'django.template.loaders.app_directories.load_template_source' 在 TEMPLATE_LOADERS 设置中需要自定义模板标签 工作?
我们知道,只要在 Django 应用程序的 templatetags 目录中添加一个自定义标签,就可以在应用程序中使用该标签。
在加载模板的情况下,我们知道在 TEMPLATE_LOADERS 设置中包含“django.template.loaders.filesystem.load_template_source”与在 TEMPLATE_DIRS 中的适当条目使 Django 能够从指定的目录。这是非常清楚和合乎逻辑的。但在自定义模板标签的情况下,我看到它们变得神奇可用。
那么您知道如何找到/加载/处理自定义模板标签吗?
【问题讨论】:
【参考方案1】:不,自定义模板标签完全不需要django.template.loaders.app_directories.load_template_source
。
您不必指定目录来告诉 django 从哪里加载 templatetags 库(就像我们在模板的情况下所做的那样),只是因为 django 假定在 @ 指定的应用程序中查找 templatetags 库987654322@名单。
它只是遍历INSTALLED_APPS
的应用程序列表,从其中的“templatetags”目录中导入所有库,并导入每个库以使它们可用。如果找不到名为 templatetags 的目录,它就会跳过。但是,它确实会尝试查看 INSTALLED_APPS 中的所有可用选项。
您可以查看django/templatetags/__init__.py
中的代码,您将了解模板标签是如何(神奇地)可用的。看代码,
from django.conf import settings
for a in settings.INSTALLED_APPS:
try:
__path__.extend(__import__(a + '.templatetags', , , ['']).__path__)
except ImportError:
pass
它只是将这些模块列表添加到__path__
。 __path__
列出的任何内容都将被视为它也作为其出现在 __path__
列表中的模块的子模块存在。
【讨论】:
以上是关于Django 自定义模板标签和模板加载器的主要内容,如果未能解决你的问题,请参考以下文章