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 标签