Django: 'current_tags' ist keine gültige Tag-Bibliothek

77

Ich habe ein kleines Django-Projekt, das ich von einem Freund erhalten habe. Der Code funktioniert perfekt auf seinem System. Auf meinem System wird beim Ausführen des Servers jedoch die folgende Fehlermeldung angezeigt:

TemplateSyntaxError at /

'current_tags' ist keine gültige Tag-Bibliothek: Vorlagenbibliothek current_tags nicht gefunden, versucht django.templatetags.current_tags

Das Problem liegt in einer Zeile in einer HTML-Datei:

{% load current_tags %}

Dieser exakt gleiche Code funktioniert auf seinem System fehlerfrei. Was könnte das sein?

Snakile
quelle
78
Um anderen die 20 Minuten zu ersparen, die ich mit diesen Fragen verbracht habe: Wenn Sie gerade Ihre benutzerdefinierte Tag-Datei erstellt haben (dies ist Ihr erstes benutzerdefiniertes Tag in einer bestimmten App), müssen Sie den Django-Entwicklungsserver neu starten dass es die neue Datei abholen kann. Dieser Fehler wird angezeigt, wenn dies auch Ihr einziges Problem ist.
Chuckmash
2
@chucksmash Danke Jesus.
Smilebomb
2
Denken Sie

Antworten:

87

Ich würde folgendes vorschlagen:

  1. (Höchstwahrscheinlich) Sie haben keine der Abhängigkeiten Ihrer Tag-Bibliothek installiert. Überprüfen Sie die Importe innerhalb des current_tags.pyModuls.

  2. Achten Sie auf die Anwendung, die die Tag - Bibliothek enthält , wird registriert settings.pyunter INSTALLED_APPS.

  3. Stellen Sie sicher, dass Sie die Tag-Bibliothek erfolgreich importieren können.

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

    Dies führt zu den Empfehlungen des folgenden Links: Der Fehler selbst führt dazu, dass Sie irregeführt werden, woher eine Vorlage stammt. Fehler beim Import werden stillschweigend ignoriert, was bedeutet, dass current_tags.pyselbst ein Syntaxfehler oder ein anderer Grund vorliegt, warum ImportError ausgelöst wird.

Wenn alles andere fehlschlägt, überprüfen Sie diesen Link: http://www.b-list.org/weblog/2007/dec/04/magic-tags/

mif
quelle
34
Wenn diese nicht funktionieren, überprüfen Sie die Reihenfolge der Apps in INSTALLED_APPS. Wenn eine Ihrer Apps ein Vorlagen-Tag von einer anderen App verwendet, ist diese zweite App per Definition eine Abhängigkeit und muss zuvor aufgelistet werden.
JCotton
9
Wenn es immer noch nicht funktioniert, entfernen Sie Ihre .pyc-Dateien und versuchen Sie es erneut (das hat mein Problem einmal gelöst)
semente
3
Ähnlich wie im obigen Kommentar habe ich zahlreiche Korrekturen versucht und nicht bemerkt, dass andere Django-Konsoleninstanzen verwendet wurden, was dazu führte, dass einige Bibliotheken nicht aktualisiert wurden! Wenn Sie der Meinung sind, dass alles in Ordnung ist und das Problem nicht gefunden werden kann, schließen Sie alle laufenden Instanzen und versuchen Sie es erneut.
Nimo
20
Vergessen Sie nicht, es
ein-
1
Vielleicht ist dies ein dummer Rat, aber starten Sie Ihren Runserver neu. Sie gewöhnen sich daran, jedes Mal neu zu laden, wenn Sie den Python-Code ändern. Das Neuladen wird jedoch entweder nicht durch Hinzufügen einer neuen Vorlagen-Tag-Datei ausgelöst oder es werden keine neuen Vorlagen-Tag-Bibliotheken registriert.
Nmgeek
77

Ich hatte dieses Problem und habe es behoben, indem ich eine leere __init__.pyDatei in meinem Verzeichnis appname / templatetags / hinzugefügt habe.

ty.
quelle
10
Ich musste den Dev Server neu starten.
Gagandeep Singh
64

Es gibt viele Möglichkeiten:

  1. Sie haben Ihren Entwicklungsserver nicht zurückgesetzt .
  2. Sie haben eine Abhängigkeitsschleife in der Templatetag-Datei.
  3. Sie haben etwas falsch geschrieben (Verzeichnis, Ordner, Vorlagenname in 'Laden' usw.).
  4. Sie haben vergessen, die App zu INSTALLED_APPS hinzuzufügen .
Strg-C
quelle
12

Neustart des Servers hat das Problem für mich gelöst. Sie müssen es in der Dokumentation erwähnt haben.

Krishnadas PC
quelle
6

Ich habe den gleichen Fehler erhalten, aber aus einem anderen Grund, also werde ich es Ihnen sagen (falls jemand anderes das gleiche Problem hat).

Ich hatte alles richtig gemacht, aber ich hatte mein benutzerdefiniertes Tag in einem Ordner mit dem Namen template_tagsund nach einer langen Suche fand ich heraus, dass es sein musste templatetags, und jetzt funktioniert es. Überprüfen Sietemplatetags also, ob der Ordnername genau ist .

steven2308
quelle
Hervorragende Antwort. Die Fehlermeldung von Django ist in diesem Fall nicht offensichtlich.
Martincho
Ich wollte diese Antwort hinzufügen, falls sie noch nicht hier war. Genau mein Problem: P
Luca Bezerra
6

Angenommen, Sie haben die folgende Struktur:

-- Anwendungsname

------- Templatetags

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

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

------- init .py

-------settings.py

- manage.py

Sie müssen Folgendes sicherstellen:

  • Ihre Anwendung selbst, in der sich Ihre "Templatetags" befinden, ist tatsächlich in INSTALLED_APPS in settings.py installiert (z. B. "Application_Name").

  • Ihr Tag-Modul selbst, das in "templatetags" vorhanden ist, ist bereits in INSTALLED_APP in settings.py installiert (z. B. "ApplicationName.templatetags.tempaltes_extras").

  • Stellen Sie sicher, dass Sie " init .py" im Verzeichnis "templatetags" haben

  • Sie müssen den Server neu starten

  • In einigen Fällen müssen Sie alle generierten * .pyc entfernen, wenn es nicht funktioniert hat, und es dann erneut versuchen

Muhammad Soliman
quelle
Ihr Tag-Modul selbst, das in "templatetags" vorhanden ist, ist bereits in INSTALLED_APP in settings.py installiert (z. B. "ApplicationName.templatetags.templates_extras"). Dies war entscheidend! Sie würden annehmen, dass 'ApplicationName' in settings.py ausreicht, aber das ist nicht so. Vielen Dank!
Cheenbabes
Kein Modul mit dem Namen 'ApplicationName.templatetags.templates_extras "
3pitt
5

"Benutzerdefinierte Tags" ist kein gültiger Tag-Bibliotheksfehler. Er tritt häufiger auf, weil die benutzerdefinierten Tags nicht in die App geladen werden.

Platzieren Sie eine leere init .py in demselben Ordner, in dem sich Ihr "benutzerdefiniertes Vorlagen-Tag" befindet, und führen Sie den folgenden Code auf dem Terminal aus, um die benutzerdefinierten Vorlagen-Tags zu laden

touch __init__.py
Pawan Kumar
quelle
Trotz der richtigen Verzeichnisstruktur und der bereits vorhandenen init .py-Datei ... habe ich diesen Fehler erhalten, bis ich diesen Befehl ausgeführt habe. Vielen Dank!
Mungojerie
Ich erhalte immer noch einen ModuleNotFound-Fehler (wenn ich versuche, den Server neu zu starten)
3pitt
4

Für andere, die sich dem stellen. Angenommen, Ihr App-Name ist MyAppund Ihr Tag-Ordnername ist templatetagsdann in settings.pySie sollten haben:

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

Dort werden sowohl Ihre Django-App als auch Ihr Tag-Ordner benötigt, der sich unter Ihrem App-Paket befindet.

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

Und in Ihrer Vorlagendatei:

{% load app_filters %}

Seien Sie app_filters.pyauch wie:

# coding=utf-8
from django import template

register = template.Library()


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

Überprüfen Sie alle oben genannten Schritte, und Sie können das Problem finden.

AmiNadimi
quelle
1
Ich habe den Fehler gemacht, das bestimmte Tag zu laden, anstatt die Datei, die das Tag enthält. Vielen Dank
Ramtin
3

Bitte stellen Sie sicher, dass Ihr Templatetags-Ordner mit Python initialisiert ist. Wenn Sie Zweifel haben, nehmen Sie einfach alle Dateien auf.

Entfernen Sie alle Dateien. Erstellen Sie im Ordner "Templatetags" nur die Datei " init .py" und starten Sie den Server neu.

Jetzt befindet sich Ihr Ordner unter Python und erledigen Sie Ihre Aufgaben.

Das funktioniert bei mir ...

Mohamed
quelle
3

Für mich war es der Fehler, den Bibliotheksnamen im loadTag in Anführungszeichen zu setzen .

FALSCH: {% load 'library_name' %}

RICHTIG: {% load library_name %}

Siehe auch andere Antworten. Ich habe auch einige dieser Probleme gelöst, bevor ich hier gelandet bin.

manu
quelle
2

Stellen Sie sicher, dass die loadAussage korrekt ist. Es sollte der Name der Datei sein, nicht der Name der App. Zum Beispiel, wenn Sie diese App haben:

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

Dann sollten Sie dies in Ihre Vorlage einfügen:

{% load foobarfilename %}

Natürlich sollten Sie auch die anderen Antworten überprüfen.

Flimm
quelle
2

Nachdem Sie das Template-Tag erstellt haben und es sich im Paket 'templatetags' in einer App befinden sollte, die in den settings.INSTALLED_APPS installiert ist, stellen Sie sicher, dass Sie Ihren Dev-Server neu starten.

Liyosi
quelle
1

Vielleicht findet das jemand nützlich: Irgendwie hatte ich das Verzeichnis 'templatetags 'stattdessen benannt 'templatetags'- mit einem Leerzeichen am Ende. Es dauerte Stunden, bis es endlich soweit war.

Eran Goldin
quelle
0

Alle hier aufgeführten Ratschläge haben mir nicht geholfen. In meinem speziellen Fall bestand das Problem darin, dass das Templatetag von einer Drittanbieter-App geladen werden musste und ich srcden Quellordner mit dieser App manuell in einen Ordner in meiner virtuellen Umgebung kopierte. Dann lief ich python setup.py installin diesen Ordner. Danach konnte Django dieses Modul nicht laden.

Dann entfernte ich die Quelle und den installierten Ordner dieser App und installierte sie mit, pip install -r requirements.txtnachdem ich eine relevante Zeile in die requirements.txtDatei eingefügt hatte. Es wurde in den srcOrdner heruntergeladen , installiert und alles begann richtig zu funktionieren. Hoffe das hilft jemandem.

Dennis Golomazov
quelle
0

In meinem Fall habe ich Bibliothek Instanz mit erstelltem Tag Variable statt Registervariable

tag = template.Library()

Aber es sollte sein

register = template.Library()

Um eine gültige Tag-Bibliothek zu sein, muss das Modul eine Variable auf Modulebene mit dem Namen register enthalten, die eine template.Library-Instanz ist, in der alle Tags und Filter registriert sind

Dhana
quelle
0

In meinem Fall war das Problem, das ich benutzte {% load filter_method_name %}

Ich musste umziehen {% filename %}

Shamsul Arefin Sajib
quelle
0

In meinem Fall war es - ich benutze

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

Ich habe vergessen, diese Vorlage zu erstellen, und sie hat sofort funktioniert. Ich weiß, dass die obigen Antworten eher mit den meisten Problemen zusammenhängen - aber ich hoffe, dass jemand sie nützlich findet. Es hätte mich erreichen sollen:

Template does not exist

aber es tat nicht und das funktionierte.

Radek
quelle