Je souhaite utiliser le moteur de modèle Django dans mon code (Python), mais je ne construis pas de site Web basé sur Django. Comment l'utiliser sans avoir de fichier settings.py (et autres) et avoir à définir la variable d'environnement DJANGO_SETTINGS_MODULE?
Si j'exécute le code suivant:
>>> import django.template
>>> from django.template import Template, Context
>>> t = Template('My name is {{ my_name }}.')
Je reçois:
ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.
python
django
templates
django-templates
template-engine
Daryl Spitzer
la source
la source
settings.configure()
.La syntaxe Jinja2 est à peu près la même que celle de Django avec très peu de différences, et vous obtenez un moteur de template beaucoup plus puissant, qui compile également votre template en bytecode (FAST!).
Je l'utilise pour créer des modèles, y compris dans Django lui-même, et c'est très bien. Vous pouvez également écrire facilement des extensions si une fonctionnalité souhaitée manque.
Voici une démonstration de la génération de code:
la source
Une raison particulière pour laquelle vous souhaitez utiliser les modèles de Django? Les deux Jinja et Genshi sont, à mon avis, supérieur.
Si vous le souhaitez vraiment, consultez la documentation Django sur
settings.py
. Surtout la section "Utilisation des réglages sans réglageDJANGO_SETTINGS_MODULE
". Utilisez quelque chose comme ceci:la source
Je recommanderais également jinja2. Il y a un bel article sur
django
vsjinja2
qui donne des informations détaillées sur les raisons pour lesquelles vous devriez préférer le plus tard.la source
{% set %}
syntaxe et de son égalité avec le moteur de template Twig (PHP). Il est préférable d'écrire toujours du code multiplateforme, mais la différence de performance n'est pas critique - par exemple, python fonctionnera toujours plus lentement que PHP, donc si vous avez besoin de performances, vous feriez mieux de créer un site avec PHP, Twig et Symfony2 ou autre. Triste mais vrai.Selon la documentation Jinja, le support de Python 3 est encore expérimental . Donc, si vous êtes sur Python 3 et que les performances ne sont pas un problème, vous pouvez utiliser le moteur de template intégré de django.
Django 1.8 a introduit la prise en charge de plusieurs moteurs de modèles, ce qui nécessite une modification de la façon dont les modèles sont initialisés. Vous devez explicitement configurer
settings.DEBUG
ce qui est utilisé par le moteur de template par défaut fourni par django. Voici le code pour utiliser des modèles sans utiliser le reste de django.la source
Un ajout à ce que d'autres ont écrit, si vous voulez utiliser Django Template sur Django> 1.7, vous devez donner à votre settings.configure (...) appeler la variable TEMPLATES et appeler django.setup () comme ceci:
Ensuite, vous pouvez charger votre modèle comme d'habitude, à partir d'une chaîne:
Et si vous avez écrit la variable DIRS dans le .configure, à partir du disque:
Erreur Django: aucun backend DjangoTemplates n'est configuré
http://django.readthedocs.io/en/latest/releases/1.7.html#standalone-scripts
la source
Je dirais aussi Jinja . Il est certainement plus puissant que Django Templating Engine et il est autonome .
S'il s'agissait d'un plug externe à une application Django existante, vous pouvez créer une commande personnalisée et utiliser le moteur de création de modèles dans votre environnement de projets. Comme ça;
Mais je ne pense pas que cela vaille la peine d'utiliser le Django Templating Engine au lieu de Jinja.
la source
Merci pour l'aide. Voici un autre ajout. Le cas où vous devez utiliser des balises de modèle personnalisées.
Disons que vous avez cette balise de modèle importante dans le module read.py
Voici le fichier de modèle html "temp.html":
Enfin, voici un script Python qui se liera à tous ensemble
La sortie serait
la source
django.template.base.add_to_builtins("read")
soulève unValueError
pour moi.TemplateDoesNotExist
erreur J'utilise django 1.10.1Trouvé ceci:
http://snippets.dzone.com/posts/show/3339
la source
Ne fais pas ça. Utilisez plutôt StringTemplate - il n'y a aucune raison d'envisager un autre moteur de modèle une fois que vous en avez connaissance.
la source
Je fais écho aux déclarations ci-dessus. Jinja 2 est un très bon sur-ensemble de modèles Django à usage général. Je pense qu'ils travaillent à rendre les modèles Django un peu moins couplés à settings.py, mais Jinja devrait bien faire pour vous.
la source
Lors de l'exécution du
manage.py
shell:la source
Google
AppEngine
utilise le moteur de création de modèles Django, avez-vous examiné comment ils le font? Vous pourriez peut-être simplement l'utiliser.la source