Форум сайта python.su
0
Привет. Извините если было.
У меня есть главный шаблон который я наследую. То есть в методе render_to_response я вызывает часть шаблона, а рендиреться весь и если мне потребуется в главном шаблоне вставить какой-то динамический контент, мне придется каждый раз его передавать в render_to_response. Возможно есть какой-то метод, который позволяет только один раз задать контент в шаблоне?
Офлайн
568
>>>>То есть в методе render_to_response я вызывает часть шаблона
Это как? Научите.
Вообще не понятно нихрена, код шаблона в студию!
Офлайн
0
Извините.
index.html
{% block content %}{% endblock %}<!-- content --> <div id="menu"></div><!-- собсно меню, которое должно быть в в шаблоне-->
{% extends "index.html" %} {% block content %} {% if posts %} {% for post in posts %} <a href="/post/view/id/{{ post.id }}">{{ post.title }}</a> <hr> {% endfor %} {% else %} empty {% endif %} {% endblock %}
def index(self): posts = Posts.objects.all() return render_to_response('other.html',{'posts':posts})
menu = category() return render_to_response('other.html',{'posts':posts,'menus':menu})
Офлайн
568
От чего зависит какое меню будет отображаться?
Или оно одинаковое для всех вьюх?
Если одинаковое, то прям в базовом шаблоне его и опиши, а если оно меняется, то сделай несколько меню и include их в нужном шаблоне в засимости от контекста.
Как то так.
Офлайн
0
FishHookНет. Не зависит. Но оно генерируется динамически
От чего зависит какое меню будет отображаться?
Или оно одинаковое для всех вьюх?
Если одинаковое, то прям в базовом шаблоне его и опиши, а если оно меняется, то сделай несколько меню и include их в нужном шаблоне в засимости от контекста.
Как то так.
Офлайн
568
Говнокод, можете пинать, только небольно
class Menu(object): fields=((),()) # ((name, url_name), (name_1, url_name_1)) params={} # {'territory_id':'territory.id', 'child_id':'child.id' } sumbenus={} # sumbenu={1:Submenu1Class, 4:Submenu2Class} is_vertical=False # nothing or 'vertical_menu' is_fixed=True @classmethod def get_menu_type(cls): return 'vertical_menu' if cls.is_vertical else '' @classmethod def get_block(cls): return 'sidebar' if cls.is_vertical else "menu" row_template='<li %s><a href="{%% url %s %s %%}?menu_entry=%s">%s</a></li>' @classmethod def get_template(cls): template=u'{%% block '+ cls.get_block() +u'%%} \ <ul class="nav '+cls.get_menu_type()+u'" style="border-style: solid; border-width: 1px; border-color: #FFF; border-radius: 2px; margin:2px"> %s </ul> \ {%% endblock %%}' return template @classmethod def get_params_str(cls): return ' '.join(['%s=%s' % (k,v) for k,v in cls.params.iteritems()]) @classmethod def get_html(cls,*args, **kwargs): fields_dict=dict([(v,k) for k,v in enumerate([x[0] for x in cls.fields]) ]) c=count(1) index=int(_thread_locals.request.GET.get('menu_entry', 0)) res=[] for name, url in cls.fields: if not fields_dict[name] in cls.sumbenus: menu_entry=c.next() if menu_entry==index and cls.is_fixed: cl='class="active"' else: cl='' res.append(cls.row_template % (cl, url, cls.get_params_str(), menu_entry, name )) else: c.next() res.append(sub_menu(cls.sumbenus[fields_dict[name]], name)) return cls.get_template() % ''.join(res) def sub_menu(sub_menu_class, name): class SubMenuInstance(Menu): fields=sub_menu_class.fields params=sub_menu_class.params @classmethod def get_template(cls): template='<li class="dropdown" data-dropdown="dropdown"><a href="#" class="dropdown-toggle">' +name+ '</a> \ <ul class="dropdown-menu"> %s </ul></li>' return template return SubMenuInstance.get_html() class MainInSub(Menu): fields=( (u'Основная очередь', 'sitizens_in_turn'), (u'Льготная очередь', 'sitizens_in_turn'), ) params={'territory_id':'territory.id'} class MainOffSub(Menu): fields=( (u'Основная очередь', 'sitizens_off_turn'), (u'Льготная очередь', 'sitizens_off_turn'), ) params={'territory_id':'territory.id'} class MainAddSub(Menu): fields=( (u'Новый гражданин', 'sitizens_add'), (u'Гражданин из БД', 'sitizens_rbdds_add'), ) params={'territory_id':'territory.id'} class MainMenu(Menu): fields=( (u'Добавить', 'sitizens_add'), (u'Граждане в очереди', 'sitizens_in_turn'), (u'Граждане снятые с очереди', 'sitizens_off_turn'), (u'Граждане получившие жилье', 'sitizens_with_home'), ) params={'territory_id':'territory.id'} is_fixed = False sumbenus={ 0:MainAddSub, 1:MainInSub, 2:MainOffSub, } # sumbenu={0:Submenu1Class, 4:Submenu2Class} class StatisticsSidebar(Menu): is_vertical = True is_fixed = False fields=( (u'Поставлены на учет', 'report1'), (u'Получили жильё(по категориям)', 'report2'), (u'Нуждаются в жилье(по категориям)', 'report3'), (u'Количество предоставленных помещений', 'report4'), (u'Количество граждан ожидающих жильё', 'report5'), (u'Количество граждан поставленных на учет в течении года (по категориям)', 'report6'), ) params={'territory_id':'territory.id'} def get_all_menuses(): print MainMenu.get_html() print StatisticsSidebar.get_html()
-extends 'templates/base.html' -block title Список граждан -block description Список граждан -block content {% include "templates/alphabet.html" %} -block list {% include "templates/pager.html" %} :python get_all_menuses()
Офлайн
568
chandРекомендую юзать CBV, тогда ты напишешь базовый класс, в котором будешь помещать в контекст свои сгенерированные динамически менюшки, а все свои вьюхи наследуй от него и не заморачивайся.FishHookНет. Не зависит. Но оно генерируется динамически
От чего зависит какое меню будет отображаться?
Или оно одинаковое для всех вьюх?
Если одинаковое, то прям в базовом шаблоне его и опиши, а если оно меняется, то сделай несколько меню и include их в нужном шаблоне в засимости от контекста.
Как то так.
Офлайн
0
Спасибо, буду разбираться.
Офлайн