Django: Создать пользовательский тег шаблона -> ImportError

Извините, что снова спрашиваю об этом, но я попробовал несколько решений из переполнения стека и несколько руководств, но пока не смог создать собственный тег шаблона. Все, что я получаю, это ImportError: No module named test_tag, когда я пытаюсь запустить сервер через python manage.py runserver.

Я создал очень простой тег шаблона (найденный здесь: django templatetag?), например:

Моя структура папок:

demo
    manage.py
    test
        __init__.py
        settings.py
        urls.py
        ...
        templatetags
            __init__.py
            test_tag.py

test_tag.py:

from django import template
register = template.Library()

@register.simple_tag
def test_tag(input):
    if "foo" == input:
        return "foo"
    if "bar" == input:
        return "bar"
    if "baz" == input:
        return "baz"
    return ""

индекс.html:

{% load test_tag %}
<html>
    <head>
    ...
    </head>
    <body>
        {% cms_toolbar %}

        {% foobarbaz "bar" %}
        {% foobarbaz "elephant" %}
        {% foobarbaz "foo" %}
    </body>
</html>

и мои настройки.py:

INSTALLED_APPS = (
    ...
    'test_tag',
    ...
)

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация из моего settings.py и что я сделал неправильно, поэтому я даже не могу запустить свой сервер. (Если я удалю 'test_tag' из установленных приложений, я смогу запустить сервер, но, конечно, получаю сообщение об ошибке, что test_tag не известен).

Спасибо


person Alexander Scholz    schedule 20.10.2013    source источник


Ответы (1)


Папка templatetags должна находиться в приложении.

Дерево вашего проекта должно выглядеть примерно так:

demo
    manage.py
    test
        __init__.py
        settings.py
        urls.py
    test_app
        __init__.py
        models.py
        tests.py
        views.py
        templatetags
            __init__.py
            test_tag.py

Затем добавьте test_app к INSTALLED_APPS и удалите оттуда test_tag.

person Thomas Orozco    schedule 20.10.2013
comment
Теперь я получаю ImportError: No module named test_app. - person Alexander Scholz; 20.10.2013
comment
@AlexanderScholz Приложение должно иметь стандартную структуру приложения, см. обновленный ответ. - person Thomas Orozco; 20.10.2013
comment
Аааа, я наконец-то понял :) Большое спасибо. Я думал, что тест уже является приложением (я очень новичок в django). Я могу опустить models.py, views.py и tests.py, и это сработает. - person Alexander Scholz; 20.10.2013
comment
@AlexanderScholz test — это проект, а не приложение; ) - person Thomas Orozco; 20.10.2013
comment
У меня есть несколько пользовательских тегов шаблонов, которые используются в проекте (несколько приложений), и они помещаются в общий каталог, например. demo/shared/templatetags. - person Jeff Bauer; 27.11.2014