Sergei_Erjemin
@Sergei_Erjemin
Улыбайся, будь самураем...

Почему в шаблонах django нет чего-нибудь вроде встроенного тега set? И чем его заменить?

Для того, чтобы максимально развести вьюшки и шаблоны иногда хочется, чтобы в шаблонах django было что-то типа объявления внутренней (внутри шаблона) переменной. Например, если какой-то блок шаблона используется многократно. Вот, например, в таком кусочке:

<input type="text"
    class="form-control"
    value="{{ APP_INVITATION_STRING_IN_FORM }}"
    id="fio"
    autocomplete="on"
    onfocus="if(this.value=='{{ APP_INVITATION_STRING_IN_FORM }}'){
                                                        this.value='';
                                                        this.style.color='#000';
                                                        }"
    onblur= "if(this.value==''){this.value='{{ APP_INVITATION_STRING_IN_FORM }}';
                                this.style.color='#777';
                                }"
    />

очень удобно, чтобы в одном месте объявить что-то типа:
{{ set APP_INVITATION_STRING_IN_FORM = "Фамилия, Имя и адрес квартиры где деньги лежат" }}
И все! А иначе, приходится в куче мест писать одно и тоже... раз за разом... А вот если бы был тег {{ set }} то жизнь стала проще. Перед очередным input сделал новое присвоение {{ set }} и просто скопировал код. Конечно, можно передать APP_INVITATION_STRING_IN_FORM из вьюшки, но это не удобно когда один и тот-же шаблон используется разными вьюшками.

Как бы без бубна, шаманства и смены шаблонизатора такой {{ set }} организовать?
  • Вопрос задан
  • 1678 просмотров
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 2
sim3x
@sim3x
Не стоит что-либо хранить или устанавливать в темплейтах - там последнее место для такого
Установи переменную лучше в settings.py

<input type="text"
    class="form-control"
    value="{{ APP_INVITATION_STRING_IN_FORM }}"
    id="fio"
    autocomplete="on"
placeholder="{{ APP_INVITATION_STRING_IN_FORM }}"
    <!--
ВТФ!???
onfocus="if(this.value=='{{ APP_INVITATION_STRING_IN_FORM }}'){
                                                        this.value='';
                                                        this.style.color='#000';
                                                        }"
    onblur= "if(this.value==''){this.value='{{ APP_INVITATION_STRING_IN_FORM }}';
                                this.style.color='#777';
                                }" -->

>


Как стилизировать плейсхолдер
https://css-tricks.com/snippets/css/style-placehol...
Ответ написан
@bromzh
Drugs-driven development
В 1.8 вроде упростился способ замены шаблонизатора. Если бы я писал что-то на этой версии, то сразу заменил бы стандартный шаблонизатор на jinja2. А там и set есть, и много чего ещё хорошего.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы