Django 从嵌套应用程序加载模板标签无法正常工作

Posted

技术标签:

【中文标题】Django 从嵌套应用程序加载模板标签无法正常工作【英文标题】:Django loading templatetags from nested apps doesn't working correctly 【发布时间】:2013-02-17 21:15:13 【问题描述】:

文件结构:

_project_
   __init__.py
   settings/ 
       __init__.py
       settings.py
   apps/
       __init__.py
       newapp/
           __init__.py
           models.py
           ....
           templatetags/
               __init__.py
               test_tag.py

...
__init__.py
manage.py

test_tag.py 包含:

from django import template
from django.template.defaultfilters import stringfilter

register = template.Library()

@register.filter
@stringfilter
def lower(value):
    return value.lower()

test.html 包含:

% load test_tag from _project_.apps.newapp.templatetags %

Django 1.5 Shell (python manage.py shell):

(InteractiveConsole)
>>> from _project_.apps.newapp.templatetags import test_tag
>>> test_tag.lower("QWERTY")
u'qwerty'

Django 1.5 的设置:

INSTALLED_APPS = (
    ...
    '_project_.apps.newapp',
    ...
)

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
)

但是 Django 1.5 产生异常 TemplateSyntaxError:

'_project_.apps.newapp.templatetags' is not a valid tag library: Template library _project_.apps.newapp.templatetags not found, tried ...

P.S:服务器重新启动,*.pyc 文件被删除,但问题存在。当 'newapp' 位于 /project/newapp/ - 一切正常。

【问题讨论】:

问题是……“我该如何解决?”? >> 问题是......“我该如何解决它?”?是的,因为我写了有问题但没有“答案”的问题 【参考方案1】:

您以错误的方式使用% load % 语法。根据the doc,% load foo from bar % 从名为bar 的标记库中加载名为foo 的标记或过滤器。在您的情况下,% load test_tag from _project_.apps.newapp.templatetags % test_tag 是库的名称,而不是标签或过滤器名称。

所以应该更像:

% load lower from test_tag  %

【讨论】:

【参考方案2】:

我认为你必须在你的 html 页面中修复加载模板标签

% load test_tag %

【讨论】:

非常感谢,它对我有用!在这种情况下KISS Principle won :)

以上是关于Django 从嵌套应用程序加载模板标签无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.10 模板在其父级之外呈现嵌套的 HTML 标签

Django 模板未正确格式化 <pre> 标签

自定义 Django 模板标签未加载到模板中

Django:无法从 DigitalOcean Droplet 上的模板加载静态文件

无法从继承的模板访问 django 表单

Django模板访问嵌套数据