Django: 'current_tags' не є допустимою бібліотекою тегів


78

У мене є невеликий проект Django, який я отримав від друга. Код чудово працює на його системі. Однак у моїй системі я отримую таке повідомлення про помилку під час запуску сервера:

Помилка TemplateSyntaxEr на /

'current_tags' не є допустимою бібліотекою тегів: Бібліотека шаблонів current_tags не знайдена, спробував django.templatetags.current_tags

Проблема полягає у рядку у файлі html:

{% load current_tags %}

Цей самий код працює в його системі без помилок. Що це може бути?


78
З метою заощадити іншим 20 хвилин, які я витратив на розбір цих запитань: якщо ви щойно створили файл власних тегів (це ваш перший власний тег у даному додатку), вам потрібно буде перезапустити сервер розробки Django, щоб що він може забрати новий файл. Ця помилка відображається, коли це теж ваша єдина проблема.
chucksmash

2
@chucksmash Дякую Ісусе.
смайлик

2
не забудьте перезапустити dev-сервер
brainLoop

Відповіді:


87

Я б запропонував наступне:

  1. (Швидше за все) Ви не встановили одну із залежностей вашої бібліотеки тегів. Перевірте імпорт всередині current_tags.pyмодуля.

  2. Переконайтеся , що додаток , яке включає в себе бібліотеку тегів зареєстрований в settings.pyвідповідно з INSTALLED_APPS.

  3. Переконайтеся, що ви можете успішно імпортувати бібліотеку тегів.

    python manage.py shell
    >>> from app.templatetags import current_tags
    

    Це зводиться до того, що рекомендує наступне посилання, яке полягає в тому, що сама помилка має тенденцію ввести вас в оману щодо того, звідки він шукає шаблон. Він мовчки ігнорує помилки при імпорті, що означає, що current_tags.pyсам по собі може мати синтаксичну помилку або іншу причину, через яку виникає помилка ImportError.

Якщо все інше не вдається, перевірте це посилання: http://www.b-list.org/weblog/2007/dec/04/magic-tags/


34
Якщо вони не працюють, перевірте порядок програм у INSTALLED_APPS. Якщо одна з ваших програм використовує тег шаблону з іншої програми, ця друга програма за визначенням є залежністю і повинна бути вказана раніше.
JCotton

9
Якщо все ще не працює, видаліть .pyc-файли та повторіть спробу (це вирішило мою проблему одного разу)
semente

3
Подібно до коментаря вище, я пробував численні виправлення, і не помічав, що використовуються інші екземпляри консолі Django, через що деякі бібліотеки не оновлюються! Якщо ви вважаєте, що все гаразд, і просто не можете знайти проблему, закрийте всі запущені екземпляри та повторіть спробу.
Німо

20
Не забудьте його знову вмикати і вимикати;), тобто, не забудьте перезапустити сервер
tttthomasssss

1
Можливо, це дурна порада, але перезапустіть сервер запуску. Ви звикаєте до його перезавантаження кожного разу, коли змінюєте код python, але перезавантаження або не запускається додаванням нового файлу тегу шаблону, або не реєструє нові бібліотеки тегів шаблонів.
nmgeek

77

У мене була ця проблема та виправлена, додавши порожній __init__.pyфайл до мого каталогу appname / templatetags /.


10
Мені довелося перезапустити сервер розробників.
Gagandeep Singh

64

Можливостей багато:

  1. Ви не скинули ваш сервер розробників .
  2. У вас є цикл залежностей у файлі templatetag.
  3. Ви щось неправильно написали (каталог, папка, назва шаблону в "завантажити" тощо).
  4. Ви забули про додавання програми в INSTALLED_APPS .

12

Перезапуск сервера вирішив проблему для мене. Вони, напевно, згадали про це в документації.


6

Я отримував ту саму помилку, але з іншої причини, тому скажу вам (на випадок, якщо хтось інший прийде до тієї ж проблеми).

У мене все було правильно, але у мене був власний тег всередині папки з іменем, template_tagsі після довгих пошуків я з’ясував, що він повинен бути templatetags, і зараз він працює. Тож перевірте, чи точно вказана назва папкиtemplatetags .


Відмінна відповідь. Повідомлення про помилку Django в цьому випадку не очевидне.
martincho

Я збирався додати цю відповідь, на випадок, якщо її тут ще не було. Саме моя проблема: P
Luca Bezerra

6

припустимо, у вас така структура:

- Ім'я_програми

------- теги шаблонів

-------------- init .py

--------------templates_extras.py

------- init .py

-------settings.py

- manage.py

Ви повинні переконатися в наступному:

  • сама ваша програма, всередині якої проживають ваші "templatetags", насправді встановлена ​​в INSTALLED_APPS у settings.py (наприклад, "Application_Name")

  • ваш модуль тегів, який існує всередині "templatetags", уже встановлений у INSTALLED_APP у settings.py (наприклад, "ApplicationName.templatetags.tempaltes_extras")

  • переконайтесь, що у вас є " init .py" у каталозі templatetags

  • вам доведеться перезапустити сервер

  • У деяких випадках вам доведеться видалити весь згенерований * .pyc, якщо він не працював, спробуйте ще раз


ваш модуль тегів, який існує всередині "templatetags", уже встановлений у INSTALLED_APP у settings.py (наприклад, "ApplicationName.templatetags.templates_extras") Це було вирішальним! Ви вважаєте, що в Application.ame буде достатньо в settings.py, але це не так. Дякую!
cheenbabes

Немає модуля з назвою 'ApplicationName.templatetags.templates_extras "
3pitt

5

"користувацькі теги" не є допустимою помилкою бібліотеки тегів, частіше трапляється через те, що користувацькі теги не завантажуються в програму.

помістіть порожній init .py всередину тієї самої папки, де розміщений ваш "тег нестандартного шаблону", і запустіть наведений нижче код на терміналі, щоб завантажити теги власного шаблону

touch __init__.py

Незважаючи на правильну структуру каталогів і наявність файлу init .py. Дякую!
mungojerie

Я все ще отримую помилку ModuleNotFound (при спробі перезапустити сервер)
3pitt

4

Для інших, хто стикається з цим. Припустимо, що ваше ім’я програми MyAppта ім’я папки тегів вказано, templatetagsу settings.pyвас має бути:

INSTALLED_APPS = [
'MyApp',
'MyApp.templatetags'
]

Там потрібні як ваша програма django, так і папка тегів, яка знаходиться під вашим пакетом програми.

-> MyApp
    ---> models.py
    ---> views.py
    ---> templatetags
      -----> __init__.py
      -----> app_filters.py

І у вашому файлі шаблону:

{% load app_filters %}

Також app_filters.pyбудьте як:

# coding=utf-8
from django import template

register = template.Library()


@register.filter(name='get_item')
def get_item(dictionary, key):
    return dictionary.get(key)

перевірте всі наведені вище кроки, і ви можете виявити проблему.


1
Раніше я робив помилку, завантажуючи конкретний тег, а не файл, що містить тег. Велике спасибі
Рамтін

3

Будь ласка, переконайтеся, що ваша папка templatetags ініціалізована за допомогою python, якщо ви сумніваєтеся, просто зробіть резервну копію всіх файлів,

Видаліть всі файли, всередині папки templatetags створіть лише файл init .py, а потім перезапустіть сервер,

Тепер ваша папка знаходиться під Python, а потім займіться своїми справами.

Це працює для мене ...


3

Для мене помилкою було розміщення лапок навколо назви бібліотеки в loadтезі.

НЕПРАВИЛЬНО: {% load 'library_name' %}

ПРАВИЛЬНО: {% load library_name %}

Зверніться до інших відповідей. Я також вирішив пару цих проблем перед тим, як приземлитися тут.


2

Переконайтесь, що loadтвердження правильне. Це має бути ім’я файлу, а не ім’я програми. Наприклад, якщо у вас є цей додаток:

appname
├── __init__.py
├── templatetags
│   ├── __init__.py
│   └── foobarfilename.py

Тоді ви повинні помістити це у свій шаблон:

{% load foobarfilename %}

Звичайно, вам слід перевірити й інші відповіді.


2

Після того, як ви створили тег шаблону, і він повинен знаходитись у пакеті 'templatetags' у програмі, встановленій у налаштуваннях. INSTALLED_APPS, переконайтеся, що перезапустили свій dev-сервер.


1

Можливо, комусь це буде корисно: я якось назвав каталог 'templatetags 'замість 'templatetags', тобто - з пробілом в кінці. Потрібні години, щоб нарешті зрозуміти.


0

Усі перелічені тут поради мені не допомогли. Отже, у моєму конкретному випадку проблема полягала в тому, що шаблон тегу потрібно було завантажити із сторонніх додатків, і я вручну скопіював вихідну папку з цією програмою в srcпапку у своєму virtualenv. Потім я забіг python setup.py installвсередину цієї папки. Після цього django не зміг завантажити цей модуль.

Потім я видалив вихідну та встановлену папку цієї програми та встановив її за допомогою, pip install -r requirements.txtдодавши відповідний рядок у requirements.txtфайл. Його завантажили в srcпапку, встановили і все почало працювати нормально. Сподіваюся, це комусь допомагає.


0

У моєму випадку я створив екземпляр бібліотеки, використовуючи змінну тегу замість змінної регістру

tag = template.Library()

Але це повинно бути

register = template.Library()

Щоб бути допустимою бібліотекою тегів, модуль повинен містити змінну рівня модуля з назвою register, яка є шаблоном. Екземпляр бібліотеки, в якій зареєстровано всі теги та фільтри


0

У моєму випадку проблема полягала в тому, що я використовував {% load filter_method_name %}

Мені довелося переодягнутися в {% filename %}


0

У моєму випадку це було - я використовую

@register.inclusion_tag('template-to-use.html')

Я забув створити цей шаблон і одразу ж він запрацював. Я знаю, що відповіді вище стосуються більшості питань, але сподіваюся, можливо, комусь це буде корисно. Це повинно було дістатись до мене:

Template does not exist

але ні, і це спрацювало.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.