Форум сайта python.su
Для меню проще написать свой templatetag с передачей контекста(чтобы можно было бы определить активный пункты меню, etc)
Офлайн
FishHook
Сам тоже пришёл к варианту вывода меню в более “статичном” виде, что бы не заводить лишние, на мой взгляд, связи в модели.
Я наверно не точно выразился - в вашем примере:
# templatetags/custom_tags.py @register.tag(name="menu_entry") def menu_entry(parser, token): try: menu_item_name = token.split_contents()[1] except ValueError: raise template.TemplateSyntaxError("%r error" % token.contents.split()[0]) return ContextMenuNode(menu_item_name) class ContextMenuNode(template.Node): def __init__(self, menu_item_name): self.menu_item_name = menu_item_name def render(self, context): menu_entry = context["menu_entry"] if menu_entry == self.menu_item_name: return "class=active" return
Офлайн
od-5, она возвращает None, то есть ее вообще можно убрать, функция все равно возвратит None, а None попав в шаблон отобразится как пустая строка, а нам это и нужно. То есть тут нет ошибки.
Офлайн
FishHook
Извиняюсь, был не прав
Офлайн
FishHook
Кстати, вы не будете против, если я пример вашего кода у себя на сайтике размещу (сайт сугубо личный, не комерческий - так сказать записная книжка про Django, написанная на Django)?
Отредактировано od-5 (Окт. 2, 2013 00:27:07)
Офлайн
od-5Да бога ради!
FishHookКстати, вы не будете против, если я пример вашего кода у себя на сайтике размещу (сайт сугубо личный, не комерческий - так сказать записная книжка про Django, написанная на Django)?
Офлайн
Кстати, None, попав в шаблон отображается именно как “none”, т.е. получаем строку вида <li none >…
что работу шаблона собственно не нарушает, но всё же.
Прикреплённый файлы: 2013-10-11-024829_1024x600_scrot.png (177,7 KБ)
Офлайн
Замените None на ''
Офлайн
В джанге есть фильтр default для таких случаев
<li {{ something|default:"" }} >
Офлайн