代码之家  ›  专栏  ›  技术社区  ›  chefsmart

Django自定义模板标记和模板加载程序

  •  4
  • chefsmart  · 技术社区  · 17 年前

    [我在 http://groups.google.com/group/django-users/browse_thread/thread/989c569d5118980d]

    是'django.template.loaders.app_directories.load_template_source' 需要在模板加载程序设置中为自定义模板标记 工作?

    我们知道,只要在django应用程序的templateTags目录中有一个自定义标记,就可以在应用程序中使用该标记。

    在加载模板的情况下,我们知道在模板加载程序设置中有“django.template.loaders.filesystem.load_template_source” 一起 模板目录中的适当条目允许Django从指定目录加载模板。这是非常清楚和合乎逻辑的。但是在定制模板标签的情况下,我看到它们变得神奇地可用。

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

    1 回复  |  直到 16 年前
        1
  •  10
  •   Craig Trader    16 年前

    不, django.template.loaders.app_directories.load_template_source 自定义模板标记完全不需要。

    您不必指定目录来告诉Django从何处加载 模板标记 库(就像我们在模板中所做的那样),因为django假设在中指定的应用程序中查找templateTags库。 INSTALLED_APPS 名单。

    它只是循环应用程序列表 安装应用程序 ,从“”导入所有库 模板标记 '目录,并导入每个目录以使其可用。如果找不到名为templateTags的目录,它只会跳过。但是,它确实尝试在已安装的应用程序中查看所有可用的选项。

    您可以查看中的代码 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__ . 以及任何列在 阿尔法 将被视为该模块的子模块, 阿尔法 列出它出现在。

    推荐文章