Ich möchte die Django-Vorlagen-Engine in meinem (Python-) Code verwenden, erstelle jedoch keine Django-basierte Website. Wie verwende ich es, ohne eine settings.py-Datei (und andere) zu haben und die Umgebungsvariable DJANGO_SETTINGS_MODULE festlegen zu müssen?
Wenn ich den folgenden Code ausführe:
>>> import django.template
>>> from django.template import Template, Context
>>> t = Template('My name is {{ my_name }}.')
Ich bekomme:
ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.
python
django
templates
django-templates
template-engine
Daryl Spitzer
quelle
quelle
settings.configure()
mehr.Die Jinja2- Syntax ist mit sehr wenigen Unterschieden fast identisch mit der von Django, und Sie erhalten eine viel leistungsfähigere Vorlagen-Engine, die Ihre Vorlage auch zu Bytecode kompiliert (SCHNELL!).
Ich benutze es für Vorlagen, auch in Django selbst, und es ist sehr gut. Sie können auch problemlos Erweiterungen schreiben, wenn eine gewünschte Funktion fehlt.
Hier einige Demonstrationen der Codegenerierung:
quelle
Gibt es einen bestimmten Grund, warum Sie Djangos Vorlagen verwenden möchten? Sowohl Jinja als auch Genshi sind meiner Meinung nach überlegen.
Wenn Sie wirklich wollen, lesen Sie die Django-Dokumentation unter
settings.py
. Insbesondere der Abschnitt "Einstellungen ohne Einstellung verwendenDJANGO_SETTINGS_MODULE
". Verwenden Sie so etwas:quelle
Ich würde auch jinja2 empfehlen. Es gibt einen schönen Artikel über
django
vs.jinja2
, der einige detaillierte Informationen darüber enthält, warum Sie den späteren bevorzugen sollten.quelle
{% set %}
Syntax und Gleichheit mit der Twig Template Engine (PHP). Es ist besser, immer plattformübergreifenden Code zu schreiben, aber der Leistungsunterschied ist nicht kritisch. Beispielsweise arbeitet Python immer langsamer als PHP. Wenn Sie also Leistung benötigen, erstellen Sie eine Site besser mit PHP, Twig und Symfony2 oder anderen. Traurig aber wahr.Laut der Jinja-Dokumentation ist die Python 3-Unterstützung noch experimentell . Wenn Sie also mit Python 3 arbeiten und die Leistung kein Problem darstellt, können Sie die integrierte Vorlagen-Engine von django verwenden.
Django 1.8 hat die Unterstützung für mehrere Template-Engines eingeführt, die eine Änderung der Art und Weise erfordern, wie Templates initialisiert werden. Sie müssen explizit konfigurieren,
settings.DEBUG
welche von der von django bereitgestellten Standardvorlagen-Engine verwendet wird. Hier ist der Code, um Vorlagen zu verwenden, ohne den Rest von Django zu verwenden.quelle
Wenn Sie Django Template für Django> 1.7 verwenden möchten, müssen Sie zusätzlich zu dem, was andere geschrieben haben, Ihre settings.configure (...) angeben, die Variable TEMPLATES aufrufen und django.setup () wie folgt aufrufen:
Dann können Sie Ihre Vorlage wie gewohnt aus einer Zeichenfolge laden:
Und wenn Sie die DIRS-Variable in der .configure von der Festplatte geschrieben haben:
Django-Fehler: Es ist kein DjangoTemplates-Backend konfiguriert
http://django.readthedocs.io/en/latest/releases/1.7.html#standalone-scripts
quelle
Ich würde auch Jinja sagen . Es ist definitiv leistungsstärker als die Django Templating Engine und es ist eigenständig .
Wenn dies ein externer Plug für eine vorhandene Django-Anwendung war, können Sie einen benutzerdefinierten Befehl erstellen und die Vorlagen-Engine in Ihrer Projektumgebung verwenden. So was;
Aber ich denke nicht, dass es sich lohnt, nur die Django Templating Engine anstelle von Jinja zu verwenden.
quelle
Vielen Dank für die Hilfe Leute. Hier ist noch eine Ergänzung. Der Fall, in dem Sie benutzerdefinierte Vorlagen-Tags verwenden müssen.
Angenommen, Sie haben dieses wichtige Vorlagen-Tag im Modul read.py
Dies ist die HTML-Vorlagendatei "temp.html":
Schließlich ist hier ein Python-Skript, das alle miteinander verbindet
Die Ausgabe wäre
quelle
django.template.base.add_to_builtins("read")
erhöht einValueError
für mich.TemplateDoesNotExist
Fehler Ich benutze Django 1.10.1Ich habe es gefunden:
http://snippets.dzone.com/posts/show/3339
quelle
Tu es nicht. Verwenden Sie stattdessen StringTemplate - es gibt keinen Grund, eine andere Template-Engine in Betracht zu ziehen, sobald Sie davon erfahren.
quelle
Ich stimme den obigen Aussagen zu. Jinja 2 ist eine ziemlich gute Obermenge von Django-Vorlagen für den allgemeinen Gebrauch. Ich denke, sie arbeiten daran, die Django-Vorlagen etwas weniger an die settings.py zu koppeln, aber Jinja sollte gut für Sie tun.
quelle
Während Sie die
manage.py
Shell ausführen:quelle
Google
AppEngine
verwendet die Django-Vorlagen-Engine. Haben Sie sich angesehen, wie sie dies tun? Sie könnten das möglicherweise einfach verwenden.quelle