Изменить переменные между URL и видом - PullRequest
1 голос
/ 08 июля 2011

Можно ли изменить переменную после того, как она была перехвачена диспетчером URL-адресов, и передать ее для просмотра измененного?

Например: у меня есть следующий URL-адрес

urlpatterns = patterns('',
    (r'^articles/(?P<article_id>\d+)/$', 'article.views.article_view'),
)

Я хочуизмените article_id перед передачей на article.views.article_view

Мне нужно это как переопределение.У меня есть приложение article, которое нельзя изменить, но я должен его использовать.: - /

Ответы [ 2 ]

3 голосов
/ 08 июля 2011

Использовать вид оболочки.Сопоставьте URL с вашим собственным представлением, которое затем вызывает article.views.article_view.Затем вы можете изменить все, что хотите, в представлении оболочки.

Пример:

urlpatterns = patterns('',
    (r'^articles/(?P<article_id>\d+)/$', 'article_wrapper.wrap_article_view'),
)

В article_wrapper.py:

import article
def wrap_article_view(request, article_id):
    article_id = modify_it(article_id)
    return article.views.article_view(request, article_id)

Обновление:

Если вам нужно выполнить один и тот же перевод article_id для нескольких представлений, вы можете сделать обертку более общей.Пример:

urlpatterns = patterns('',
    url(r'^articles/(?P<article_id>\d+)/$', 
        view='article_wrapper.generic_article_wrapper',
        kwargs={'view_name':'article_view'}
    ),
)

и article_wrapper.py:

import article
def generic_article_wrapper(request, article_id, view_name=None):
    article_id = modify_it(article_id)
    try:
        view = get_attr(article.views, view_name)
    except AttributeError:
        # handle invalid view name
    return view(request, article_id)
2 голосов
/ 08 июля 2011
from article.views import article_view

def my_article_view(request, article_id):
    my_id = article_id * 2 # modify your id
    return article_view(request, my_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...