[PYTHON] Utiliser Jinja2 pour le moteur de modèle PasteScript

PasteScript

PasteScript est un outil de ligne de commande qui fournit les deux fonctions suivantes. Cette fois, nous parlerons de paster create.

--Créez un modèle de projet basé sur le modèle spécifié (vous pouvez créer le vôtre) (paster create) -Lancement de l'application WSGI (y compris le serveur WSGI et les paramètres de middleware associés) définie par PasteDeploy (paster serve)

Le goulot d'étranglement était qu'il n'a pas pris en charge Python 3 pendant longtemps, mais PasteScript 2.0 publié le mois dernier prend enfin en charge Python 3.

Commande paster create

Voici un exemple de spécification du modèle inclus basic_package. Le modèle basic_package crée un projet de package Python qui inclut setup.py.

$ paster create -t basic_package test
Selected and implied templates:
  PasteScript#basic_package  A basic setuptools-enabled package

Variables:
  egg:      test
  package:  test
  project:  test
Enter version (Version (like 0.1)) ['']: 0.1
Enter description (One-line description of the package) ['']: test
Enter long_description (Multi-line description (in reST)) ['']: test
Enter keywords (Space-separated keywords/tags) ['']: python
Enter author (Author name) ['']: FGtatsuro
Enter author_email (Author email) ['']:
Enter url (URL of homepage) ['']:
Enter license_name (License name) ['']:
Enter zip_safe (True/False: if the package can be distributed as a .zip file) [False]:
Creating template basic_package
Creating directory ./test
  Recursing into +package+
    Creating ./test/test/
    Copying __init__.py to ./test/test/__init__.py
    Recursing into __pycache__
      Creating ./test/test/__pycache__/
  Copying setup.cfg to ./test/setup.cfg
  Copying setup.py_tmpl to ./test/setup.py
Running /Users/tatsuro/.homesick/repos/dotfiles/home/.virtualenvs/flask-boilerplate/bin/python setup.py egg_info
# setup.Projet de package Python contenant py
$ ls test
setup.cfg     setup.py      test          test.egg-info

Vous pouvez créer votre propre modèle. Je n'expliquerai pas les détails (voir Documentation), mais le flux général est le suivant.

  1. Créez un projet de package Python qui définit le modèle.
  2. Créez une classe qui hérite de la classe paste.script.templates.Template (ci-après dénommée modèle personnalisé). 3.1 Spécifiez la classe définie en 2 à partir du point d'entrée de setup.py du projet en 1.

Moteur de modèle fourni par défaut

Vous pouvez personnaliser le nom de fichier et le contenu du modèle spécifié par les arguments donnés lors de la génération du modèle.

#Reflète les arguments donnés de manière interactive(ex. version, description)
$ cat test/setup.py
from setuptools import setup, find_packages
import sys, os

version = '0.1'

setup(name='test',
      version=version,
      description="test",
      long_description="""\
test""",
      classifiers=[], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers
      keywords='python',
      author='FGtatsuro',
      ...
      )

À ce stade, le moteur de modèle est utilisé pour réécrire le contenu. Le moteur de modèle à utiliser est le suivant lorsque vous regardez le document.

  1. Si l'attribut ʻuse_cheetah` du modèle personnalisé est True, alors Cheetah est utilisé.
  2. Sinon, string.Template est utilisé.

Utiliser un autre moteur de modèle

L'un ou l'autre des deux convient, mais vous pouvez également créer un modèle personnalisé à l'aide de votre moteur de modèle familier. Personnellement, je voulais utiliser Jinja2, auquel je suis habitué.

La requête ci-dessus peut être réalisée en associant l'attribut template_renderer du modèle personnalisé à une méthode statique qui satisfait certaines conditions. Voici un exemple d'utilisation de Jinja2 comme moteur de modèle.

python


# https://github.com/FGtatsuro/flask-boilerplate/blob/master/flask_boilerplate/templates.py
class Boilerplate(Template):
    _template_dir = 'templates'
    summary = 'A boilerplate for Flask project'
    required_templates = []
    vars = [
        var('app_name', 'Flask application name', default=NoDefault),
        var('description', 'One-line description of the package'),
        var('author', 'Author name'),
        var('author_email', 'Author email'),
    ]
    @staticmethod
    def template_renderer(body, context, filename=None):
        return Jinja2Template(body).render(context)
    ...

Les conditions que la méthode statique doit remplir sont les suivantes.

Cet exemple est Jinja2, mais il peut être utilisé de la même manière tant qu'il s'agit d'un moteur de modèle capable de générer la chaîne de caractères réécrite à partir des trois arguments donnés afin que les conditions ci-dessus puissent être satisfaites. Je ne peux pas le dire avec certitude car les autres moteurs ne sont pas confirmés, mais je pense que la majorité des moteurs de modèles sont corrects.

Recommended Posts

Utiliser Jinja2 pour le moteur de modèle PasteScript
Moteur de template Jinja2 2 Python
Comment utiliser Template Engine pour Network Engineer
Utilisez le modèle jinja2 dans un fichier Excel
Comment utiliser le moteur de modèle dans une application de fichier de Pyramid
analyser pour le format, pour Jinja2 ...?
Application Web avec Python3.3.1 + Bottle (1) - Changer le moteur de modèle en jinja2
Utiliser PySide pour l'interface utilisateur HDA
Modèle de pipeline de prétraitement pour DataLiner
Modèle Python pour Codeforces-test manuel-