【问题标题】:Django custom template tags and template loadersDjango 自定义模板标签和模板加载器
【发布时间】: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 能够从指定的目录。这是非常清楚和合乎逻辑的。但在自定义模板标签的情况下,我看到它们变得神奇可用。

那么您知道如何找到/加载/处理自定义模板标签吗?

【问题讨论】:

    标签: django django-templates


    【解决方案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__ 列表中的模块的子模块存在。

    【讨论】:

      猜你喜欢
      • 2017-07-29
      • 2016-02-25
      • 2011-07-10
      • 2019-06-06
      • 2021-07-13
      • 2015-01-20
      • 2019-12-30
      • 2012-03-15
      相关资源
      最近更新 更多