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

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


некоторым причинам:

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

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

from your_app2.models import model

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

from your_project.your_app2.models import model

Он работал со мной.


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