С увеличением количества проектов встала проблема автоматизации создания каркаса под новые приложения. До недавнего времени новые проекты мы создавали путем копирования заготовленного шаблонного проекта и изменения различных настроек в разных местах проекта. Само собой это убивало достаточно много времени.
Попытки решить эту проблему вывели меня на проект под названием Python Paste. В общих чертах — это набор утилит для создания веб-приложений, к примеру можно создать свой фреймворк (в Pylons используют именно его). Помимо утилит для веба Python Paste содержит модуль Paste Script, с помощью которого можно создавать шаблоны-заготовки и на основе них генерировать проекты.
Устанавливаем PasteScript
Создаем примерно такую структуру проекта:
Теперь определим расположение шаблонов и настроек к ним:
где simple — название шаблона, SimpleTemplate — класс с настройками.
В классе SimpleTemplate настроим сам шаблон, укажем каталог с файлами, краткое описание и параметр «название базы», который попросим ввести пользователя:
Зайдем в templates/ и сгенерим новый джанговский проект
Переходим к настройке файлов шаблона. Параметры, указанные при генерации можно использовать внутри файлов шаблона, предварительно добавив к названию файла _tmpl. Эти переменные имеют вид
И еще пара замечаний по шаблонным файлам:
На этом все. Устанавливаем пакет с шаблоном
Командой
Командой
Осталось создать шаблоны на все случаи жизни.
Исходники проекта на GitHub
Ссылки:
Попытки решить эту проблему вывели меня на проект под названием Python Paste. В общих чертах — это набор утилит для создания веб-приложений, к примеру можно создать свой фреймворк (в Pylons используют именно его). Помимо утилит для веба Python Paste содержит модуль Paste Script, с помощью которого можно создавать шаблоны-заготовки и на основе них генерировать проекты.
Как это все работает?
- Создаем проект, в котором будут содержаться заготовки, указываем пути до каталогов с заготовками и делаем другие настройки.
- В каталоге шаблона создаем файловую структуру, с учетом того что файлы и имена каталогов будут пропускаться через шаблонизотор Cheetah (внутри файлов можно использовать различные переменные, такие как название проекта и любые другие как сами настроите).
- Устанавливаем наш проект, содержащий заготовки.
- Командой генерации создаем новый проект на основе шаблона. Перед генерацией спросят название проекта и различные параметры, которые были указаны в настройках шаблона
Создадим простой шаблон для проектов на Django
Устанавливаем PasteScript
pip install PasteScript
,Создаем примерно такую структуру проекта:
Теперь определим расположение шаблонов и настроек к ним:
from setuptools import setup, find_packages
setup(
name='paster-templates',
version = "0.1",
packages = find_packages(),
install_requires=[
'setuptools',
'PasteScript',
'Cheetah',
],
include_package_data=True,
zip_safe=False,
# Здесь описываем наши шаблоны
entry_points="""
[paste.paster_create_template]
simple=templates.pastertemplates:SimpleTemplate
"""
)
где simple — название шаблона, SimpleTemplate — класс с настройками.
В классе SimpleTemplate настроим сам шаблон, укажем каталог с файлами, краткое описание и параметр «название базы», который попросим ввести пользователя:
from paste.script.templates import Template
from paste.script.templates import var
class SimpleTemplate(Template):
_template_dir = 'simple'
summary = "Simple project"
use_cheetah = True
vars = [
var('database',
'Database name.',
default="test_db"),
]
Зайдем в templates/ и сгенерим новый джанговский проект
django-admin.py startproject simple
который и будет шаблоном.Переходим к настройке файлов шаблона. Параметры, указанные при генерации можно использовать внутри файлов шаблона, предварительно добавив к названию файла _tmpl. Эти переменные имеют вид
$(property_name)
, названия каталогов для пропускания через шаблонизатор такие: +property_name+
. Для примера кусок файла settings.py_tmpl:…
# Project name - $(project)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': '$(database)',
}
}
...
И еще пара замечаний по шаблонным файлам:
- Если в шаблоне пишем по русски, в начало файла надо вставить
#encoding UTF-8
- Если в шаблоне надо использовать символ $ и чтобы cheetah его не принял за свой, его надо обернуть в
#raw ... $content... #end raw
Заключение
На этом все. Устанавливаем пакет с шаблоном
python setup.py install
Командой
paster create --list-templates
смотрим список шаблонов в системе (шаблоны ищутся, на сколько я понимаю, сканом установленных в системе egg's на предмет шаблонных плагинов, что описывали в entry_points).Командой
paster create --template=simple SimpleProject
создаем новый проект на основе шаблона simple.Осталось создать шаблоны на все случаи жизни.
Исходники проекта на GitHub
Ссылки: