-
Исправить бы название "Шаблонизатор и ВЛОЖЕННЫЕ тэги"
Всем доброго времени суток.
Что-то затык у меня приключился.
Сделал свой тэг для вывода некоего блока с заголовком.
Текста заголовка передается в виде параметра
Все было классно, до тех пор пока я не попробовал вывести в заголовке переменную из представления:{% beginform "это заголовок" %}
....
{% endform %}
Уже по всякому пытался, не выводит как надо.views.py:
{ ... 'mycaption': u'Это заголовок' ... }
templ.html:
{% beginform mycaption %}
Может я что-то не так делаю? -
Исправить бы название "Шаблонизатор и ВЛОЖЕННЫЕ тэги"
Вы можете сами исправить название кликнув на карандаш справа от него.
Уже по всякому пытался, не выводит как надо.
Как выводит и как надо?
Как вы делаете тег?
-
Сейчас не могу проверить, локальный сервер как-то странно работает (html берет из запущенного проекта, а ресурсы - из предыдущего). Что-то порушилось.
Делал так:
Внутри шаблонов - несколько дивов, ничего особенного.@register.inclusion_tag('beginform.html', takes_context=False)
def beginform(caption, width, height=0):
return {'caption': caption, 'width': width, 'height': height}
@register.inclusion_tag('endform.html', takes_context=False)
def endform():
return {}
пробовал так:
он так и пишет "{{ caption }}"{% beginform {{caption }} %}
Если писать, например так:
То все работает как надо. Но охота сделать его динамическим.{% beginform "Это заголовок" %} -
Делал так:
@register.inclusion_tag('beginform.html', takes_context=False) def beginform(caption, width, height=0): return {'caption': caption, 'width': width, 'height': height} @register.inclusion_tag('endform.html', takes_context=False) def endform(): return {}Таким образом вы сделали два отдельных тега, которые никак не связаны с тем, что между ними. Это действительно то, что вам надо?
Первый тег явно принимает два обязательных параметра, а вы передаёте один. Придумать что-то конкретнее невозможно, потому что вы не хотите показывать сообщение об ошибке.
-
задумчиво так
Интересно, а что делает волшебный параметр takes_context=False?
-
Таким образом вы сделали два отдельных тега, которые никак не связаны с тем, что между ними. Это действительно то, что вам надо?На тот момент я еще не знал как сделать парные закрывающиеся. Само-собой переделаю.
Второй параметр не обязательный. В шаблоне этого тэга у меня написано:Первый тег явно принимает два обязательных параметра, а вы передаёте один. Придумать что-то конкретнее невозможно, потому что вы не хотите показывать сообщение об ошибке.
Сообщения об ошибке нет. Он просто выводит то, что я ему скажу. Т.е. если я напишу {% beginform "это форма пользователя {{ user }}" "500px" %}, то он это и выведет. Буквально. Без подстановки реального пользователя.<div class="defaultform" style="width:{{ width }};
{% if height %}height:{{ height }}; {% endif %}">
<div class="formhead"><h2>{{ caption }}</h2></div>
Это понятно. Но ведь я же передаю ему все в виде параметра, контекст ему не нужен. Потому что я могу вывести несколько форм: одну для меню, другую для пользователя. И в шапку каждой вовсе не обязательно подставлять что-то из контекста.Интересно, а что делает волшебный параметр takes_context=False?
Возможно, это просто ограничение шаблоново джанго. И все это можно сделать другими способами. Но все таки, в чем подвох? -
Остается только формировать название формы во view.py. Но тогда теряется возможность мультиязычной поддержки на уровне шаблонов. Хотя я до этого еще не дошел, может и нормально все будет :)
-
{% beginform "это форма пользователя {{ user }}" "500px" %}
Если Вам нужно ИМЕННО так, то тут как раз надо принимать контекст и рендерить переданную строку шаблоном.
{% beginform "это форма пользователя ivan" "500px" %}и
{% beginform user "500px" %}будут работать как надо
-
Либо я непонимаю чего-то, либо вы :-)
И в этом случае каждая форма подцепит к себе что-то из контекста?Потому что я могу вывести несколько форм
Но думаю, я просто где-то в архитектуре попутал. Можно сделать гораздо все проще. Через css например или через js. -
Если Вы передадите своему inclusion tag-у строку без шаблонных тэгов (сорри, по-другому не сказать:)), то при рендеринге этой строки как шаблона туда ничего и не подставится. Если контекст передается, это не значит, что его надо обязательно где-то использовать.
-
Т.е. если я напишу {% beginform "это форма пользователя {{ user }}" "500px" %}, то он это и выведет. Буквально.
Да, так и должно быть. Потому что это просто строка в кавычках, шаблонная система там ничего не парсит.
Аркадий уже пару раз писал, что вот это:
{% beginform user "500px" %}... должно работать. Этот вариант устраивает?
-
Понятно. Иными словами, надо всю строку формировать целиком где-нибудь в другом месте.
Тему можно закрывать.
Спасибо за терпение :-) -
Или так:
{% beginform "это форма пользователя %s" user "500px" %} -
{% beginform "это форма пользователя %s" user "500px" %}Похоже, это оно! Спасибо, буду пробовать.
-
хм. Не работает такая конструкция в шаблонизаторе :(
-
Александр, пожалуйста, раскрывайте всегда понятие "не работает". Ни у кого ведь нет вашего кода, чтобы в любой момент посмотреть, что он делает :-).
-
Похоже, ТС решил, что такая конструкция будет работать сама по себе, без дописывания в тэге ее обработки. Подсказываю: не будет.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.




