在url调度程序捕获变量并将其传递给视图后,是否可以更改变量?
例如: 我有以下urlpattern
urlpatterns = patterns('',
(r'^articles/(?P<article_id>\d+)/$', 'article.views.article_view'),
)
我想在将article_id
传递给article.views.article_view
article
我需要这个,作为覆盖。我有{{1}}个应用程序无法更改,但我必须使用它。 : - /
答案 0 :(得分:3)
使用包装器视图。将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)
答案 1 :(得分:2)
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)