-
Добрый день, уважаемые гуру.
Ситуация такая: необходимо организовать отображение информационных блоков на страницах. В базе предпологаю хранить инфу о блоке (параметры и вьюха) и идентификатор страницы.
Как лучше организовать идентификацию страниц?
Просто по url не очень подходит, т.к. есть необходимость группировки страниц.
Лучшим вариантом для меня видится добавление параметра в схему url
Например:
url(r'^article/(?P<slug>\w+)$', 'articles.views.show_article', page_id="article")
чтобы все статьи имели один идентификатор страницы.
Со всеми тонкостями джанги еще не знаком. Подскажите пожайлуста куда копать. Нутром чую что надо идти в сторону middleware.
Заранее благодарен. -
Предпологаю это сделать следующим образом:
Перед вызовом вьюхи переместить передаваемый ей пармаетром page_id в параметры request
В settings прописал данный класс в MIDDLEWARE_CLASSES.class PageIdMiddleware(object):
def process_view(self, request, view, args, kwargs):
request.__class__.page_identificator = kwargs.get('page_identificator', 'default')
del kwargs['page_identificator'] # удаляем из параметров передаваемых в функцию
return None
Но данный код не работает.
Версия джанги самая свежая.
Подскажите, что я делаю не так. -
Разобрался сам.
Окончательный код:
пример urls.py
Middlewareurl(r'^article/(?P<slug>\w+)$', 'articles.views.show_article', {'page_identificator': 'article')
теперь у request есть параметр page_identificator который можно использовать для идентификации типа страницы.class PageIdMiddleware(object):
"""
Обрабатывает входные параметры для вьюхи,
если есть параметр _page_id, перемещает параметр в request
"""
def process_view(self, request, view, args, kwargs):
request.__class__.page_identificator = kwargs.get('page_identificator', 'default')
if kwargs.has_key('page_identificator'): del kwargs['page_identificator']
return None
Может кто-нибудь предложит более красивое решение? -
def process_view(self, request, view, args, kwargs): request.page_identificator = kwargs.pop('page_identificator', 'default') -
Кстати,
request.__class__не столько некрасиво, сколько неверно, потому что тогда идентификатор будет один на несколько произвольных запросов.

