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?
python
django
portability
Snakile
quelle
quelle
Antworten:
Ich würde folgendes vorschlagen:
(Höchstwahrscheinlich) Sie haben keine der Abhängigkeiten Ihrer Tag-Bibliothek installiert. Überprüfen Sie die Importe innerhalb des
current_tags.py
Moduls.Achten Sie auf die Anwendung, die die Tag - Bibliothek enthält , wird registriert
settings.py
unterINSTALLED_APPS
.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.py
selbst 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/
quelle
Ich hatte dieses Problem und habe es behoben, indem ich eine leere
__init__.py
Datei in meinem Verzeichnis appname / templatetags / hinzugefügt habe.quelle
Es gibt viele Möglichkeiten:
quelle
Neustart des Servers hat das Problem für mich gelöst. Sie müssen es in der Dokumentation erwähnt haben.
quelle
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_tags
und nach einer langen Suche fand ich heraus, dass es sein musstetemplatetags
, und jetzt funktioniert es. Überprüfen Sietemplatetags
also, ob der Ordnername genau ist .quelle
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
quelle
"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
quelle
Für andere, die sich dem stellen. Angenommen, Ihr App-Name ist
MyApp
und Ihr Tag-Ordnername isttemplatetags
dann insettings.py
Sie 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.
Und in Ihrer Vorlagendatei:
Seien Sie
app_filters.py
auch 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.
quelle
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 ...
quelle
Für mich war es der Fehler, den Bibliotheksnamen im
load
Tag 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.
quelle
Stellen Sie sicher, dass die
load
Aussage korrekt ist. Es sollte der Name der Datei sein, nicht der Name der App. Zum Beispiel, wenn Sie diese App haben:Dann sollten Sie dies in Ihre Vorlage einfügen:
Natürlich sollten Sie auch die anderen Antworten überprüfen.
quelle
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.
quelle
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.quelle
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
src
den Quellordner mit dieser App manuell in einen Ordner in meiner virtuellen Umgebung kopierte. Dann lief ichpython setup.py install
in 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.txt
nachdem ich eine relevante Zeile in dierequirements.txt
Datei eingefügt hatte. Es wurde in densrc
Ordner heruntergeladen , installiert und alles begann richtig zu funktionieren. Hoffe das hilft jemandem.quelle
In meinem Fall habe ich Bibliothek Instanz mit erstelltem Tag Variable statt Registervariable
Aber es sollte sein
quelle
In meinem Fall war das Problem, das ich benutzte
{% load filter_method_name %}
Ich musste umziehen
{% filename %}
quelle
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.
quelle