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  %}
Другие вопросы по тегам