Django:在重定向后保留捕获的参数

标签 django url redirect view capture

我在 URL 和 View 之间的交互方面遇到了一些问题。在我的项目中,我有重定向和双重重定向,它们工作正常,但是当我尝试恢复正则表达式捕获的参数时,目标 View 提示它没有接收到任何参数。这是我的实现:

项目/urls.py:

lang_re = r'(ca|en|es|fr|ge)'

urlpatterns = patterns('',
    url(r'^$', RedirectView.as_view(url='/en/home/')),
    url(r'^'+lang_re+'/home/', include('components.home.urls', namespace='components.home')),
    ...
)

组件/home/urls.py:

urlpatterns = patterns('',
    url(r'^$', RedirectView.as_view(url='cover')),
    url(r'^cover$', views.cover, name='home_cover'),
    ...
)

组件/home/views.py

def cover(request, lang_code):
    ...

这里发生的事情是,例如,当一个人进入根目录时,一个人被重定向到“/en/home”。这与第二个正则表达式匹配(它应该捕获“en”部分作为参数),之后通过相对重定向将用户再次重定向到“/en/home/cover”。最后一个 URL 最终找到一个永久 View “components.home.views.cover”,并运行它的功能。问题是重定向后捕获的参数(“en”)似乎丢失了,Django 给我以下错误消息:

Request Method: GET
Request URL: http://localhost:8000/en/home/cover
Django Version: 1.5.2
Exception Type: TypeError
Exception Value: cover() missing 1 required positional argument: 'lang_code'

关于如何组合重定向和捕获参数的任何线索?

最佳答案

您遇到这个问题是因为在您的正则表达式中,您没有 named argument匹配 View 方法。

现在解决这个问题:

lang_re = '(ca|en|es|fr|ge)'
url(r'^(?P<lang_code>'+lang_re+')/home/', include('components.home.urls', namespace='components.home')),

阅读更多关于 argument name matches of regex here 的信息

注意:您不需要正则表达式周围的 r''

关于Django:在重定向后保留捕获的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19472434/

相关文章:

mysql - Django 和 MySQL unicode 错误

django - 无法在 django haystack 中重建索引

django - Apache Django URL 问题

.htaccess - 使用重定向/重写规则获取漂亮的浏览器 url 的问题

python - 使用 Django 的 m2m_changed 修改保存的内容 pre_add

Django在算术运算后聚合多列

http - 添加到 URL 请求的随机 .png 字符串

java - Java 中 PHP 的 $_SERVER ['DOCUMENT_ROOT' ] 的等价物是什么

apache - 使用 .htaccess 重写规则重定向到我服务器上的不同文件夹

jsf - 何时使用 NavigationHandler.handleNavigation 与ExternalContext.redirect/dispatch