[英]How to redirect url pattern with variables from urls.py in Django?
我想用 urls.py
變量重定向url模式。
我引用其他stackoverflow解決方案 ,但我不知道什么時候url有一個變量,如下面的代碼。
from django.conf.urls import patterns, url
from django.views.generic import RedirectView
urlpatterns = patterns(
url(
r'^permalink/(?P<id>\d+)/foo/$',
RedirectView.as_view(url='/permalink/(?P<id>\d+)/')
),
)
使用此代碼,django將重定向/permalink/1/foo/
至/permalink/(?P<id>\\d+)/
,而不是/permalink/1/
。
有沒有使用views.py
解決方案?
當然我知道使用控制器的解決方案,但我想知道使用url模式是否有任何更簡單的解決方案。
將url='/permalink/(?P<id>\\d+)/'
傳遞給RedirectView
將不起作用,因為視圖不會替換url中的命名參數。
但是, RedirectView
允許您提供pattern_name
而不是要重定向到的url
。 使用為原始視圖傳遞的相同args和kwargs反轉url。
這將適用於您的情況,因為兩個url模式都有一個命名參數id
。
urlpatterns = [
url(r'^permalink/(?P<id>\d+)/foo/$',
RedirectView.as_view(pattern_name="target_view"),
name="original_view"),
url(r'^permalink/(?P<id>\d+)/$', views.permalink, name="target_view"),
]
如果目標url模式使用其他參數,則不能使用url
或pattern_name
。 相反,您可以get_redirect_url
RedirectView
並覆蓋get_redirect_url
。
from django.core.urlresolvers import reverse
from django.views.generic import RedirectView
class QuerystringRedirect(RedirectView):
"""
Used to redirect to remove GET parameters from url
e.g. /permalink/?id=10 to /permalink/10/
"""
def get_redirect_url(self):
if 'id' in self.request.GET:
return reverse('target_view', args=(self.request.GET['id'],))
else:
raise Http404()
將QuerystringRedirect
放在視圖模塊中是一種好習慣。 然后,您可以使用以下內容將視圖添加到您的網址模式:
urlpatterns = [
url(r'^permalink/$', views.QuerystringRedirect.as_view(), name="original_view"),
url(r'^permalink/(?P<id>\d+)/$', views.permalink, name="target_view"),
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.