[PYTHON] Verwenden Sie Jinja2 für die PasteScript-Vorlagen-Engine

PasteScript

PasteScript ist ein Befehlszeilenprogramm, das die folgenden zwei Funktionen bietet. Dieses Mal werden wir über "paster create" sprechen.

--Erstellen Sie eine Projektvorlage basierend auf der angegebenen Vorlage (Sie können Ihre eigene erstellen) (paster create) -Starten Sie die WSGI-Anwendung (einschließlich des WSGI-Servers und der zugehörigen Middleware-Einstellungen), die von PasteDeploy festgelegt wurde (paster serve).

Der Engpass war, dass Python 3 lange Zeit nicht unterstützt wurde, aber PasteScript 2.0, das im letzten Monat veröffentlicht wurde, unterstützt schließlich Python 3.

Befehl paster create

Das Folgende ist ein Beispiel für die Angabe der enthaltenen Vorlage "basic_package". Die Vorlage "basic_package" erstellt ein Python-Paketprojekt, das setup.py enthält.

$ 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.Python-Paketprojekt mit py
$ ls test
setup.cfg     setup.py      test          test.egg-info

Sie können Ihre eigene Vorlage erstellen. Ich werde die Details nicht erklären (siehe Dokumentation), aber der allgemeine Ablauf ist wie folgt.

  1. Erstellen Sie ein Python-Paketprojekt, das die Vorlage definiert.
  2. Erstellen Sie eine Klasse, die die Klasse "paste.script.templates.Template" erbt (im Folgenden als benutzerdefinierte Vorlage bezeichnet). 3.1 Geben Sie die in 2 definierte Klasse vom Einstiegspunkt von "setup.py" des Projekts in 1 an.

Standardmäßig bereitgestellte Vorlagen-Engine

Sie können den Dateinamen und den Inhalt der angegebenen Vorlage anhand der Argumente anpassen, die beim Generieren der Vorlage angegeben wurden.

#Reflektiert die interaktiv vorgebrachten Argumente(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',
      ...
      )

Zu diesem Zeitpunkt wird die Template-Engine verwendet, um den Inhalt neu zu schreiben. Die zu verwendende Vorlagen-Engine lautet wie folgt, wenn Sie sich das Dokument ansehen.

  1. Wenn das Attribut use_cheetah der benutzerdefinierten Vorlage True ist, wird Cheetah verwendet.
  2. Andernfalls wird string.Template verwendet.

Verwenden Sie eine andere Template-Engine

Beides ist in Ordnung, aber Sie können auch eine benutzerdefinierte Vorlage mit Ihrer bekannten Vorlagen-Engine erstellen. Persönlich wollte ich Jinja2 verwenden, was ich gewohnt bin.

Die obige Anforderung kann realisiert werden, indem das Attribut template_renderer der benutzerdefinierten Vorlage einer statischen Methode zugeordnet wird, die bestimmte Bedingungen erfüllt. Das Folgende ist ein Beispiel für die Verwendung von "Jinja2" als Vorlagen-Engine.

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)
    ...

Die Bedingungen, die die statische Methode erfüllen muss, sind wie folgt.

Dieses Beispiel ist "Jinja2", kann jedoch auf die gleiche Weise verwendet werden, solange es sich um eine Vorlagen-Engine handelt, die die neu geschriebene Zeichenfolge aus den angegebenen drei Argumenten generieren kann, damit die oben genannten Bedingungen erfüllt werden können. Ich kann nicht sicher sagen, da die anderen Engines nicht bestätigt sind, aber ich denke, die meisten Template-Engines sind in Ordnung.

Recommended Posts

Verwenden Sie Jinja2 für die PasteScript-Vorlagen-Engine
Jinja2 | Python-Vorlagen-Engine
Verwendung von Template Engine für Network Engineer
Verwenden Sie die jinja2-Vorlage in einer Excel-Datei
Verwendung der Template-Engine in einer Dateianwendung von Pyramid
Für Format analysieren, für Jinja2 ...?
Python Template Engine Empy
Webanwendung mit Python3.3.1 + Flasche (1) - Ändern Sie die Vorlagen-Engine in jinja2
Verwenden Sie PySide für die HDA-Benutzeroberfläche
Pipeline-Vorlage für DataLiner vorverarbeiten
Python-Vorlage für Codeforces-manuelle Test-