Проблема загрузки пользовательских тегов шаблона (ошибка: нет модуля с именем x)

В настоящее время я пишу несколько пользовательских тегов шаблонов, но по какой-то причине они не будут загружаться. Моя структура каталогов выглядит следующим образом:

MyProj
 |
 ----MyApp
     |
     |----templatetags
          |
          |----myapp_tags.py
          |----__init__.py

В myapp_tags.py

from django.template import Library, Node
from myproj.myapp.models import Product

register = Library()

class LatestProductsNode(Node):
    def render(self, context):
        context['recent_products'] = Product.objects.all()[:5]
        return ''

def get_latest_products(parser, token):
    return LatestProductsNode()

get_latest_products = register.tag(get_latest_products)

В settings.py

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',
    'myproj.myapp',
)

В шаблоне

{% load myapp_tags %}

Ошибка при загрузке страницы:

Exception Type:     TemplateSyntaxError Exception Value:    

'myapp_tags' is not a valid tag library: Could not load template library from django.templatetags.myapp_tags, No module named myapp_tags

Ответ 1

в settings.py, вы никогда не должны называть проект "myproj" явно. В INSTALLED_APPS просто используйте "myapp". Кроме того, вы должны иметь это:

TEMPLATE_LOADERS = (
    'django.template.loaders.app_directories.load_template_source',
)

И не забудьте указать __init__.py в папке myapp, а также в templatetags.

Используйте manage.py shell, затем from myapp.templatetags import myapp_tags, чтобы узнать, есть ли какая-либо ошибка python в файле myapp_tags.py.

Кроме того, убедитесь, что имя файла myapp_tags.py не конфликтует с другой папкой/файлом в вашем проекте.

Надеюсь, это поможет.

Ответ 2

Одна вещь, которая меня опрокинула, заключается в том, что магический импорт templatetags обходит автоматическую перезагрузку сервер разработки. Если в manage.py shell

работает следующее:
>>> from django.templatetags import myapp_tags
>>>

Затем все работает, и вам просто нужно перезагрузить сервер разработки. Если, с другой стороны, вы получаете ImportError, тогда что-то не так, и вы должны проверить свой INSTALLED_APPS, что у вас есть файл __init__.py в каталоге templatetags и все другие вещи, предложенные в других ответах.

Это, вероятно, применимо только к небольшой части людей, которые испытывают проблемы с загрузкой тегов шаблонов, но это второй раз, когда я пришел к этому вопросу через столько недель, и оба раза он просто перезапустил сервер разработки до заставить вещи работать.

Ответ 3

Некоторые причины:

  • из-за ошибки в коде templatetgs.
  • Если вы использовали импорт модели в templatetags

Например, для # 2. Если вы делаете:

from your_app2.models import model

Это пойдет не так, поэтому вместо этого вы должны сделать

from your_project.your_app2.models import model

Это сработало так.

Ответ 4

Я только что столкнулся с той же проблемой в Django 2 и понял, что файлы пользовательских тегов шаблона должны иметь уникальные имена во всех приложениях вашего проекта.

Ответ 5

Проблема заключается в том, что nyapp_tags не находится на верхнем уровне установленного проекта. Если вы поместите myproj.myapp.templatetags в INSTALLED_APPS, вы должны быть в порядке.