10
votes

Templation HTML utilisant JINJA2 - Perdu

J'essaie de créer un modèle HTML dans Python en utilisant JINJA2. J'ai un dossier de modèles avec mon "template.html" mais je ne sais pas comment gérer les environnements ou les chargeurs d'emballages.

J'ai installé Jinja2 en utilisant easy_python et a exécuté le script suivant. P>

  File "log_manipulationLL.py", line 291, in <module>
env = Environment(loader=PackageLoader('yourapplication', 'templates'))
 File "/usr/local/lib/python2.7/dist-packages/Jinja2-2.6-py2.7.egg/jinja2/loaders.py",    line 216, in __init__
provider = get_provider(package_name)
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 213, in get_provider
__import__(moduleOrReq)
ImportError: No module named yourapplication


0 commentaires

4 Réponses :


8
votes

packageloader attend un module Python réel à l'aide de la syntaxe de points régulière. Par exemple, si votre structure ressemble à ceci: xxx

Vous devez utiliser myapp comme nom de module.


0 commentaires

7
votes

J'ai résolu ce problème à l'aide du code suivant: xxx

où ce code est dans le fichier script name.py .

Je suis Je ne sais pas si ma réponse est pertinente mais que je me demandais que quelqu'un peut peut-être trouver cette réponse utile. Si je me trompe, laissez-moi savoir.


2 commentaires

Appels de chargeur de paquets scriptname.py . Si vous initialisez le chargeur d'emballage là-bas, le code sera appelé une seconde fois.


Vous devez faire attention - si vous ne faites pas partie des fonctions / classes, la ré-importation du même fichier peut ré-exécuter le code à l'intérieur, ce qui entraîne une sortie à deux modèles!



12
votes

Si vous ne voulez pas ou si vous n'avez pas besoin d'un package Python, vous devez probablement utiliser un FileSystemloader à la place, comme ceci:

from jinja2 import Environment, FileSystemLoader, select_autoescape
env = Environment(
    loader=FileSystemLoader('file/path/'),
    autoescape=select_autoescape(['html', 'xml']),
)


0 commentaires

3
votes

Packageloader est défini comme ceci:

PackageLoader('templates', '').list_templates()


0 commentaires