Comment puis-je utiliser des modèles Django sans le reste de Django?
Je veux utiliser le moteur de template de Django dans mon (Python) du code, mais je ne suis pas la construction d'un Django site web. Comment puis-je l'utiliser sans avoir un settings.py fichier (et d'autres) et d'avoir à mettre la DJANGO_SETTINGS_MODULE variable d'environnement?
Si j'exécute le code suivant:
>>> import django.template
>>> from django.template import Template, Context
>>> t = Template('My name is {{ my_name }}.')
J'obtiens:
ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.
Vous devez vous connecter pour publier un commentaire.
La solution est simple. C'est en fait bien documenté, mais pas trop facile à trouver. (J'ai dû creuser autour de vous -- il n'est pas venu quand j'ai essayé quelques recherches sur Google.)
Le code suivant fonctionne:
Voir la documentation de Django (lien ci-dessus) pour une description de certains de ces paramètres, vous pouvez définir (comme mot-clé arguments à configurer).
settings.configure()
plus.mathfilters
dans cette approche?Jinja2 la syntaxe est à peu près la même chose que de Django reinhardt, avec très peu de différences, et vous obtenez un beaucoup plus puissant moteur de template, qui compile également votre modèle de bytecode (RAPIDE!).
- Je l'utiliser pour la création de modèles, y compris dans Django lui-même, et c'est très bon. Vous pouvez aussi facilement créer des extensions si certaines fonctionnalités que vous voulez est manquant.
Voici une démonstration de la génération de code:
Aucune raison particulière pour laquelle vous souhaitez utiliser Django modèles? Les deux Jinja et Genshi sont, à mon avis, supérieur.
Si vous le voulez vraiment, alors voir le Documentation de Django sur
settings.py
. En particulier la section "Utilisation des paramètres de réglageDJANGO_SETTINGS_MODULE
". Utiliser quelque chose comme ceci:Je vous recommande également les jinja2. Il y a un l'article de nice sur
django
vsjinja2
qui donne des informations détaillées sur pourquoi vous devez visez plutôt la plus tard.{% set %}
de la syntaxe et de l'égalité de moteur de template Twig (PHP). Il est préférable d'écrire de la croix-plate-forme de code toujours, mais la différence de performances n'est pas critique - par exemple, python sera toujours plus lent que PHP donc, si vous avez besoin de performances de mieux vous créer un site avec PHP, Twig et Symfony2 ou autre. La triste vérité.Selon le Jinja documentation, Python 3 est encore au stade expérimental. Donc, si vous êtes sur Python 3 et de la performance n'est pas un problème, vous pouvez utiliser de django reinhardt, construit dans le moteur de template.
Django 1.8 introduit la prise en charge plusieurs moteurs de template qui nécessite une modification de la façon dont les modèles sont initialisés. Vous devez configurer explicitement
settings.DEBUG
qui est utilisé par défaut le moteur de template fourni par django. Voici le code à utiliser des modèles sans utiliser le reste de django.Je dirais Jinja ainsi. Il est certainement plus puissant que le Moteur de Template de Django et il est autonome.
Si c'était un connecteur externe à une application Django, vous pouvez créer une commande personnalisée et utiliser le moteur de template dans vos projets de l'environnement. Comme cela,
Mais je ne pense pas que cela vaut la peine juste en utilisant le Moteur de Template de Django au lieu de Jinja.
Merci pour l'aide les gars. Voici un complément. Le cas où vous avez besoin d'utiliser des balises de modèle.
Disons que vous avez cette importante balise de modèle dans le module read.py
C'est le fichier modèle html "temp.html":
Enfin, voici un script Python qui va lier tous ensemble
La sortie serait
django.template.base.add_to_builtins("read")
soulève unValueError
pour moi.TemplateDoesNotExist
erreur, je suis en utilisant django 1.10.1Trouvé ceci:
http://snippets.dzone.com/posts/show/3339
Ne le font pas. Utilisation StringTemplate au lieu-il n'y a pas de raison de considérer tout autre modèle de moteur une fois que vous savez à ce sujet.
Un plus de ce que l'autre a écrit, si vous souhaitez utiliser Django Template sur Django > 1.7, vous devez donner à vos paramètres.configurer(...) appeler les MODÈLES de variables et de les appeler django.setup() comme ceci :
Ensuite, vous pouvez charger votre modèle comme normalement, à partir d'une chaîne :
Et si vous avez écrit DIRS variable dans le .configurer, à partir du disque :
Django d'Erreur: Pas de DjangoTemplates backend est configuré
http://django.readthedocs.io/en/latest/releases/1.7.html#standalone-scripts
Je reprends les déclarations ci-dessus. Jinja 2 est un très bon super-ensemble de modèles Django pour un usage général. Je pense qu'ils sont en train de faire la Django modèles un peu moins couplée à la settings.py mais Jinja devrait bien faire pour vous.
Lors de l'exécution de la
manage.py
shell:Google
AppEngine
utilise le moteur de template de Django, vous avez pris un coup d'oeil à la façon dont ils le font? Vous pourriez peut-être juste utiliser.