{% with %}

Июль 8, 2009

Очень, на мой взгляд, полезный тэг в шаблонах джанги, который позволяет очень элегантно удалять дупликацию!

Например, у вас есть 30 мест, куда вы хотите вставить состояние чего-либо, например сбора данных и писать туда «В процессе» или «Готово», так же у вас есть 30 объектов которые приходят в шаблон, у которых есть метод state() возвращающий логическую переменную…

В шаблоне в 30 местах придется написать что-то подобное:

{% if var1.state %}

В процессе

{% else %}

Готово

{% endif %}

...

{% if var2.state %}

В процессе

{% else %}

Готово

{% endif %}

А если потом вы захотите поменять надписи на картинки? опять копи-паст? и проверять, что ничего не забыто. Ужас, но есть решение.

Можно сделать шаблон, вида:

//state.html

{% if var.state %}

В процессе

{% else %}

Готово

{% endif %}

А в главном шаблоне вставлять этот со специальным тэгом:

{% with var1 as var %}

{% include "state.html" %}

{% endwith %}

а в другом месте:

{% with var2 as var %}

{% include "state.html" %}

{% endwith %}

Теперь можно менять дизайн отображения состояния и не волноваться — легко и красиво.

tags:
posted in Без рубрики, На заметку by dmitko

7 Comments to "{% with %}"

  1. Miillanna wrote:

    красиво, сделал! Благодарю!!!

  2. Wolf wrote:

    «Полезного много нашла для себя»

  3. Red Alert wrote:

    Мне интересно здесь
    мда, с последними строчкой не согласен ))
    Побольше б таких постов на блоге.
    отлично!!! Все супер!
    Портал просто супер, порекомендую знакомым!

  4. Knigi wrote:

    Ничего себе подборочка!!!!!!! Великолепно!

  5. UltraDiz wrote:

    Подскажите пожалуйста, конкретнее где можно посмотреть данную тематику, и подробное описание?

  6. lizz wrote:

    Мне кажется циклы решают более элегантно эту проблему :) .

  7. dmitko wrote:

    @lizz: у меня было дело не в циклах — а было много мест где надо было выводить однотипные блоки, а имена переменных не получалось сделать одинаковыми — поэтому простой вынос дупликации в отдельный шаблон не помогала — а с помощью with получилось достаточно «красиво»

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org