Джанго: СУХОЙ в корне противоречит логическому разделению? - PullRequest
1 голос
/ 19 ноября 2010

Это похоже на вопрос: Как использовать параметры метода в шаблоне Django?

Я понимаю (и согласен с этим и ценю) основную философию Django отделения бизнес-логикииз логики представления.

Однако иногда кажется, что СУХОСТЬ усложняется, и СУХОЙ - это практика еще большей тяжести, не так ли?

Допустим, у меня есть шаблон, который я использую длянавигация.Я повторно использую (включая) этот шаблон снова и снова для каждого слоя навигации.Красиво и сухо.Тем не менее, я хочу, чтобы шаблон знал, какую итерацию nav он представляет.

Клянусь, я помню метод для достижения этой цели - что-то вроде {% include 'llamas'html' |2%} но я могу ошибаться.

Если я, как я могу сохранить этот шаблон (и навигацию) СУХИМ без нарушения принципа логического разделения?

Ответы [ 2 ]

0 голосов
/ 19 ноября 2010

Мой совет - переключиться на Jinja2.Тег include в основном такой же, но у вас также есть тег macro, который дает вызываемый блок, который можно легко использовать с переменными.

Некоторые вариации тега include:

{% include "sidebar.html" ignore missing %}
{% include "sidebar.html" ignore missing with context %}
{% include "sidebar.html" ignore missing without context %}
{% include ['page_detailed.html', 'page.html'] %}
{% include ['special_sidebar.html', 'sidebar.html'] ignore missing %}

С макросами вы можете делать что-то вроде этого:

{% macro input(name, value='', type='text') -%}
    <input type="{{ type }}" value="{{ value|e }}" name="{{ name }}">
{%- endmacro %}

Что можно назвать так:

{% import 'forms.html' as forms %}
<dl>
    <dt>Username</dt>
    <dd>{{ forms.input('username') }}</dd>
    <dt>Password</dt>
    <dd>{{ forms.input('password', type='password') }}</dd>
</dl>

Предполагая, что файл с макросом равен forms.html,Вы также можете поместить макрос в тот же файл, чтобы вам не пришлось импортировать.

0 голосов
/ 19 ноября 2010

Вместо включения вы также можете расширить общий шаблон, включающий или встроенный код для хлебных крошек.

например, sometemplate.html:

{% extends "base_with_breadcrumbs.html" %}

Кроме того, если вы неЕсли вы не хотите иметь панировочные сухари на некоторых страницах, внутри "base_with_breadcrumbs.html" вы можете обернуть крошки в оператор {% if with_crumbs%} ... {% endif%}.

Внутри базового шаблона выможет определять блоки, которые могут быть заполнены в производных шаблонах.

Кроме того, посмотрите на jinja2, он похож на django, но имеет много приятных функций.Я переписал более 50 шаблонов в jinja для своего проекта и никогда не оглядывался назад.

...