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
Ich würde folgendes vorschlagen:
(Höchstwahrscheinlich) Sie haben keine der Abhängigkeiten Ihrer Tag-Bibliothek installiert. Überprüfen Sie die Importe im current_tags.py
-Modul.
Stellen Sie sicher, dass die Anwendung, die die Tag-Bibliothek enthält, in settings.py
unter INSTALLED_APPS
registriert ist.
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/
Ich hatte dieses Problem und es wurde behoben, indem eine leere __init__.py
-Datei in meinem Verzeichnis appname/templatetags/hinzugefügt wurde.
Möglichkeiten sind viele:
Server neu starten hat das Problem für mich gelöst. Sie müssen es in der Dokumentation erwähnt haben.
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
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.
"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
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.
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 ...
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.
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.
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.
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.
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.
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.
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