Проблема загрузки пользовательских тегов шаблонов (ошибка: нет модуля с именем x)
в настоящее время я пишу несколько пользовательских тегов шаблонов, но по какой-то причине они не будут загружаться. Мой структура каталогов выглядит следующим образом:
MyProj
|
----MyApp
|
|----templatetags
|
|----myapp_tags.py
|----__init__.py
In 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)
In 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
4 ответов
в settings.py, вы никогда не должны называть проект "myproj" явно. В INSTALLED_APPS
, просто используйте "myapp". Кроме того, вы должны иметь это :
TEMPLATE_LOADERS = (
'django.template.loaders.app_directories.load_template_source',
)
и обязательно иметь __init__.py
на а также в templatetags
.
использовать manage.py shell
затем from myapp.templatetags import myapp_tags
чтобы узнать, есть ли ошибка python в myapp_tags.py файл.
кроме того, убедитесь, что myapp_tags.py имя файла не конфликтует с другим папка / файл в вашем проекте.
надеюсь, что это помогает.
одна вещь, которая меня споткнулась, это то, что магический импорт templatetags обходит автоматическую перезагрузку сервера разработки.
Если следующее работает в manage.py shell
>>> from django.templatetags import myapp_tags
>>>
тогда все на самом деле работает и нужно просто перезагрузить сервер разработки. Если с другой стороны вы получаете ImportError
тогда что-то не так, и вы должны проверить свой INSTALLED_APPS
, что у вас есть __init__.py файл в каталоге templatetags и все остальные вещи, предложенные в других ответах.
это, вероятно, будет применяться только к крошечной части людей, которые испытывают проблемы с загрузкой тегов шаблонов, но это второй раз, когда я пришел к этому вопросу за столько недель, и оба раза это просто перезапуск сервера разработки, чтобы заставить вещи работать.
некоторым причинам:
- из-за ошибки в коде templatetgs.
- если вы использовали импорт модели в templatetags
для #2, например. Если вы делаете:
from your_app2.models import model
это пойдет не так, поэтому вместо выше, вы должны сделать
from your_project.your_app2.models import model
Он работал со мной.
проблема в том, что nyapp_tags
не находится на верхнем уровне установленного проекта. Если поставить myproj.myapp.templatetags
на INSTALLED_APPS
, вы должны быть хорошо.