Проблема загрузки пользовательских тегов шаблона (ошибка: нет модуля с именем 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
, вы должны быть в порядке.