Was ist der beste Ort, um Vorlagen in ein Django-Projekt einzufügen?
87
Aus dem Django-Buch, Kapitel 4 :
Wenn Sie sich keinen offensichtlichen Ort für das Einfügen Ihrer Vorlagen vorstellen können, empfehlen wir, ein Vorlagenverzeichnis in Ihrem Django-Projekt zu erstellen (dh in dem in Kapitel 2 erstellten MySite-Verzeichnis, wenn Sie unseren Beispielen gefolgt sind).
Genau das mache ich und hat für mich großartig funktioniert.
Meine Verzeichnisstruktur sieht ungefähr so aus:
/media
für alle meine CSS / JS / Bilder usw.
/templates
für meine Vorlagen
/projectname
für den Hauptprojektcode (dh den Python-Code)
Platziert
<PROJECT>/<APP>/templates/<APP>/template.html
für app-spezifische Vorlagen, um die App an anderer Stelle wiederverwendbar zu machen.Für allgemeine "globale" Vorlagen habe ich sie eingefügt
<PROJECT>/templates/template.html
quelle
<APP>
s in<PROJECT>/<APP>/templates/<APP>/template.html
?TEMPLATE_DIRS = (os.path.join(BASE_DIR, "templates"))
TEMPLATE_DIRS
veraltet jetzt - Sie sollten stattdessen hinzufügenDIRS=[os.path.join(BASE_DIR, "templates")]
zuTEMPLATES
- siehe stackoverflow.com/questions/29725132/...Nach Dominic und Dlrust
Wir verwenden eine Setuptools-Quelldistribution (sdist), um unser Django-Projekt und unsere Apps für die Bereitstellung in unseren verschiedenen Umgebungen zu verpacken.
Wir haben festgestellt, dass sich die Vorlagen und statischen Dateien in den Django-Anwendungsverzeichnissen befinden müssen, damit sie von setuptools gepackt werden können.
Unsere Vorlagen und statischen Pfade sehen beispielsweise folgendermaßen aus:
Damit dies funktioniert, muss MANIFEST.in geändert werden (siehe http://docs.python.org/distutils/sourcedist.html#the-manifest-in-template ).
Ein Beispiel für MANIFEST.in:
Außerdem müssen Sie in Ihrer Django-Einstellungsdatei bestätigen, dass sich der App_Directories- Loader in Ihren TEMPLATE_LOADERS befindet. Ich denke, es ist standardmäßig in Django 1.4 vorhanden.
Ein Beispiel für die Vorlagenlader für Django-Einstellungen:
Nur für den Fall, dass Sie sich fragen, warum wir sdists verwenden, anstatt nur rsync-Dateien zu kopieren. Es ist Teil unseres Konfigurationsmanagement-Workflows, in dem wir einen einzelnen Build-Tarball haben, der mit PIP unverändert in Test-, Akzeptanz- und Produktionsumgebungen bereitgestellt wird.
quelle
/static/
in Ihren Layoutplan aufgenommen zu werden, wenn Sie an Vorlagen und modulare Apps denken. Vielleicht möchten Sie eine andere bewährte Methode erwähnen, indem Siecss
Dateien in einen Ordner legen , derstatic/app/css
ebenfalls fürjs
und vielleichtjpg
oder nur aufgerufen wird/static/app/images
.DJANGO 1.11
Fügen Sie einen Vorlagenordner hinzu, in dem die Datei "manage.py" vorhanden ist. Dies ist Ihr Basisverzeichnis. Ändern Sie die DIRS für TEMPLATES wie folgt in Ihrer settings.py
]]
Um nun die Vorlage mithilfe des Codes zu verwenden,
in views.py. Dies funktioniert völlig gut für Django 1.11
quelle
Dies ist eher eine persönliche Entscheidung auf Projektebene. Wenn Sie über Apps sprechen, die steckbar sein müssen, ist ein Vorlagenverzeichnis in Ihrer App der Ort, an dem sie standardmäßig verwendet werden. Aber projektweit funktioniert es am besten für Sie.
quelle
Ich habe verstanden,
TEMPLATE_DIRS
erfordert einen absoluten Weg. Und ich mag keine absoluten Pfade in meinem Code. Das funktioniert also gut für mich insettings.py
:quelle
BASE_DIR
os.path.join(BASE_DIR, '../APPNAME/templates')
Django 1.10
TEMPLATE_DIRS
ist veraltet.Jetzt müssen wir Folgendes verwenden
TEMPLATE
: Einführung in Django 1.8 :Über den besten Ort, Django auf der Suche nach Vorlage wie folgt:
Weitere Informationen: https://docs.djangoproject.com/de/1.10/topics/templates/#configuration
quelle
Die vorherige Lösung hat in meinem Fall nicht funktioniert. Ich benutzte:
quelle
TEMPLATE_DIRS
ist jetzt veraltet.BASE_DIR
os.path.join(BASE_DIR, '../myapp/templates')
Sie können auch in Betracht ziehen, Ihre Vorlagen mithilfe von django-dbtemplates in einer Datenbank zu speichern . Es ist auch für das Caching und die Django-Reversion-Anwendung eingerichtet, mit der Sie alte Versionen Ihrer Vorlagen beibehalten können.
Es funktioniert ganz gut, aber ich würde etwas mehr Flexibilität beim Importieren / Synchronisieren zum / vom Dateisystem bevorzugen.
[Bearbeiten: 20. August 2018 - Dieses Repository ist nicht verfügbar. Eines mit demselben Namen ist unter https://github.com/jazzband/django-dbtemplates verfügbar und wurde vor 8 Monaten aktualisiert. Ich benutze Django nicht mehr in irgendeiner sinnvollen Weise, kann also nicht dafür bürgen.]
quelle