Django загрузка шаблонов из вложенных приложений работает неправильно
Структура файла:
_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 (оболочка python manage.py):
(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 ...
PS: сервер перезапущен, *.pyc файлы удалены, но проблема существует. Когда 'newapp' находится в /project/ newapp / - все ок.
2 ответа
Решение
Я думаю, что вы должны исправить тэг load templat на своей html странице
{% load test_tag %}
Вы используете {% load %}
синтаксис неправильно. Согласно документу {% load foo from bar %}
загружает тег или фильтр с именем foo
из библиотеки тегов называется bar
, В твоем случае {% load test_tag from _project_.apps.newapp.templatetags %}
test_tag
это имя библиотеки вместо тега или имени фильтра.
Так что это должно быть больше похоже на:
{% load lower from test_tag %}