Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django中使用url.py中的变量重定向url模式?_Python_Django_Django Urls_Url Redirection - Fatal编程技术网

Python 如何在Django中使用url.py中的变量重定向url模式?

Python 如何在Django中使用url.py中的变量重定向url模式?,python,django,django-urls,url-redirection,Python,Django,Django Urls,Url Redirection,我想用url.py中的变量重定向url模式 我引用了,但我不知道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_vie

我想用
url.py
中的变量重定向url模式

我引用了,但我不知道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.conf.url导入模式,url
从django.views.generic导入重定向视图
urlpatterns=模式(
网址(
r“^permalink/(?P\d+)/foo/$”,
RedirectView.as_视图(url='/permalink/(?P\d+/))
),
)
使用此代码,django将
/permalink/1/foo/
重定向到
/permalink/(?p\d+)/
,而不是
/permalink/1/

有没有不使用
views.py的解决方案


当然,我知道使用控制器的解决方案,但我想知道使用url模式是否有更简单的解决方案。

url='/permalink/(?p\d+/”
传递到
重定向视图
将不起作用,因为视图不会替换url中的命名参数

但是,
RedirectView
允许您提供要重定向到的url,而不是
url
。使用为原始视图传递的相同参数和KWARG反转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"),
]
最好将
QuerystringRedirect
放在视图模块中。然后,将视图添加到url模式中,如下所示:

urlpatterns = [
    url(r'^permalink/$', views.QuerystringRedirect.as_view(), name="original_view"),
    url(r'^permalink/(?P<id>\d+)/$', views.permalink, name="target_view"),
]
urlpatterns=[
url(r“^permalink/$”,views.QuerystringRedirect.as\u view(),name=“original\u view”),
url(r'^permalink/(?P\d+/$),views.permalink,name=“target_view”),
]
urlpatterns = [
    url(r'^permalink/$', views.QuerystringRedirect.as_view(), name="original_view"),
    url(r'^permalink/(?P<id>\d+)/$', views.permalink, name="target_view"),
]