Django - определение шаблона включает / расширяет в одном месте так же, как URL-пути определены в urls.py - PullRequest
1 голос
/ 29 апреля 2011

Мне очень нравится переход с PHP на Python / Django и возможность расширять шаблоны. Тем не менее, я все еще обнаруживаю, что все еще выполняю немало повторяющихся работ по определению шаблонов, расширению других шаблонов и т. Д. Просто задаюсь вопросом, знает ли кто-нибудь какой-либо способ абстрагировать все это в один файл, который сообщает, какие шаблоны другие шаблоны должны расширяться / включать?

1 Ответ

0 голосов
/ 29 апреля 2011

Простой ответ: не с функциональностью по умолчанию. Абстрагирование таких вещей, как тег {% base %} в другой файл, значительно затруднит чтение шаблонов.

Один из способов убрать «лишнюю работу» - заставить ваш редактор сделать это за вас. В моем случае я определяю все свои шаблоны как .dhtml файлы и вставляю VIM в шаблон в файл всякий раз, когда открываю пустой файл .dhtml. Большинство редакторов, ориентированных на программирование, имеют эту встроенную функциональность, чтобы вам не пришлось вручную копировать / вставлять или перепечатывать базовые структуры.

Еще одна вещь, которую следует учитывать, - это то, что вы можете создавать сами шаблоны не самым оптимальным образом. Например, если у вас разные базовые шаблоны, можете ли вы заменить разные базовые шаблоны CSS? CSS может изменять шаблоны таким образом, что программисты могут иногда упускать из виду. Для хорошего примера, посмотрите CSS Zen Garden . Изменения, которые вы видите, поразительны, и они совсем не меняют базовый HTML.

Для такого изменения вы могли бы просто иметь это в templates/base.html:

<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/default.css" />
{% block extracss %}{% endblock %}

И чтобы включить превосходящий CSS, вы помещаете это в свои шаблоны:

{% extends "base.html" %}
{% block extracss %}
    <link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/orchid_beauty.css" />
{% endblock %}
...