[英]Django URLconf: How to use captured params in include's RedirectView?
我有一个父 URLconf:
from django.conf.urls import include, patterns, url
urlpatterns = patterns('',
(r'^main/(?P<name>[^/]+)/(?P<region>[^/]+)/(?P<id>[^/]+)/', include('foo')),
)
还有一个包含重定向的子 URLconf(包含在父级中):
from django.conf.urls import patterns, url
urlpatterns = patterns('',
url(r'^view/$', RedirectView.as_view(url='/main/%(name)s/%(region)s/%(id)s/detail')),
)
(本质上,我试图将一个看起来像/main/product/1/134/view
的路径重定向到一个看起来像/main/product/1/134/detail
的路径。)
Django 文档说“包含的 URLconf 从父 URLconf 接收任何捕获的参数。”
但是当我尝试访问/main/product/1/134/view
,我收到一个KeyError
因为无法识别name
。
是否有其他方法必须在 RedirectView 中引用接收到的捕获参数?
注意:当我在父 URLconf 中执行所有操作时,我没有收到错误消息:
urlpatterns = patterns('',
(r'^main/(?P<name>[^/]+)/(?P<region>[^/]+)/(?P<id>[^/]+)/view/$', RedirectView.as_view(url='/main/%(name)s/%(region)s/%(id)s/detail'))
)
文档的这一部分建议您应该使用两个百分号而不是一个:
给定的 URL 可能包含字典样式的字符串格式,它将根据 URL 中捕获的参数进行插值。 因为关键字插值总是完成(即使没有传入参数),URL 中的任何“%”字符都必须写为“%%”,以便 Python 将它们转换为输出的单个百分号。
因此,在您的情况下,请尝试:
url(r'^view/$', RedirectView.as_view(url='/main/%%(name)s/%%(region)s/%%(id)s/detail')),
使用pattern_name
参数而不是url
可能更干净。 args
和kwargs
将用于反转新的 url。
url(r'^view/$', RedirectView.as_view(pattern_name='name_of_url_pattern_to_redirect_to')),
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.