web-dev-qa-db-de.com

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

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

TemplateSyntaxError bei/

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

Das Problem ist mit einer Zeile in einer HTML-Datei:

{% load current_tags %}

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

72
snakile

Ich würde folgendes vorschlagen:

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

  2. Stellen Sie sicher, dass die Anwendung, die die Tag-Bibliothek enthält, in settings.py unter INSTALLED_APPS registriert ist.

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

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

    Das führt dazu, was der folgende Link empfiehlt. Das heißt, der Fehler selbst führt dazu, dass Sie sich irreführen, wo er nach einer Vorlage sucht. Fehler beim Import werden ignoriert, was bedeutet, dass current_tags.py selbst einen Syntaxfehler oder einen anderen Grund für den ImportError hat.

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

79
mif

Ich hatte dieses Problem und es wurde behoben, indem eine leere __init__.py-Datei in meinem Verzeichnis appname/templatetags/hinzugefügt wurde.

74
ty.

Möglichkeiten sind viele:

  1. Sie haben Ihren dev-Server nicht zurückgesetzt.
  2. Sie haben Abhängigkeitsschleife in der Templatetag-Datei.
  3. Sie falsch geschrieben etwas (Verzeichnis, Ordner, Name der Vorlage in 'load' usw.).
  4. Sie haben vergessen, die App zu INSTALLED_APPS hinzuzufügen.
62
Ctrl-C

Server neu starten hat das Problem für mich gelöst. Sie müssen es in der Dokumentation erwähnt haben.

9
Krishnadas PC

angenommen, Sie haben die folgende Struktur:

-- Anwendungsname

------- templatetags

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

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

------- init . py

-------settings.py

- verwalten.py

Sie müssen Folgendes sicherstellen:

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

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

  • vergewissern Sie sich, dass Sie im Verzeichnis "templatetags" " init . py" haben

  • sie müssen den Server neu starten 

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

6
msoliman

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

Ich hatte alles richtig, aber ich hatte mein benutzerdefiniertes Tag in einem Ordner namens template_tags und nach langer Suche habe ich herausgefunden, dass es templatetags sein musste, und jetzt funktioniert es. Daher ist check, dass der Ordnername genau templatetags ist.

6
steven2308

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

platzieren Sie ein leeres 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
5
Pawan Kumar

Für andere, die sich dem stellen. Angenommen, Ihr App-Name ist MyApp und Ihr Tag-Ordnername ist templatetags. In settings.py sollten Sie Folgendes haben:

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

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

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

Und in deiner Vorlagendatei:

{% load app_filters %}

Auch app_filters.py 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 obigen Schritte, und Sie können das Problem finden.

3
AmiNadimi

Bitte stellen Sie sicher, dass Ihr Templatetags-Ordner mit Python initialisiert wird. Wenn Sie sich nicht sicher sind, nehmen Sie einfach alle Dateien auf.

Entfernen Sie alle Dateien, Im templatetags-Ordner. Erstellen Sie nur die Datei init . Py,

Jetzt befindet sich Ihr Ordner unter Python, und machen Sie dann Ihre Sachen.

Das funktioniert für mich ...

3
Mohamed

Stellen Sie sicher, dass die load-Anweisung korrekt ist. Es sollte der Name der Datei sein, nicht der Name der App. Wenn Sie beispielsweise 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.

2
Flimm

Für mich war es der Fehler, den Namen der Bibliothek im load-Tag in Anführungszeichen zu setzen.

FALSCH: {% load 'library_name' %}

RICHTIG: {% load library_name %}

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

2
manu

Nachdem Sie das Vorlagen-Tag erstellt haben und es sich innerhalb des 'templatetags'-Pakets innerhalb einer in den Einstellungen installierten App befinden sollte, müssen Sie den Dev-Server neu starten.

2
Liyosi

Vielleicht findet jemand das nützlich: Irgendwie hatte ich das Verzeichnis 'templatetags ' anstelle von 'templatetags' benannt, das heißt - mit einem Leerzeichen am Ende. Es dauerte Stunden, bis es endlich klar wurde.

1
Eran Goldin

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ß, obige Antworten beziehen sich eher auf die meisten Probleme - aber ich hoffe, vielleicht findet es jemand nützlich. Es hätte zu mir kommen sollen:

Template does not exist

aber es hat nicht geklappt und das hat funktioniert.

0
Radek

In meinem Fall war das Problem, dass ich {% load filter_method_name %} verwendete.

Ich musste zu {% filename %} wechseln

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

Dann entfernte ich den Quell- und Installationsordner dieser App und installierte ihn mit pip install -r requirements.txt, nachdem eine relevante Zeile in die requirements.txt-Datei eingefügt wurde. Es wurde in den Ordner src heruntergeladen, installiert und alles funktionierte einwandfrei. Hoffe das hilft jemandem.

0

In meinem Fall .__ habe ich die Bibliotheksinstanz mit tag variable anstelle von register variable erstellt 

tag = template.Library()

Aber es sollte sein

register = template.Library()

Um eine gültige Tag-Bibliothek zu sein, muss das Modul eine Modulebene .__ enthalten. Variable namensregister, das eine template.Library-Instanz ist, in der Alle Tags und Filter werden registriert

0
dhana