首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解django.shortcuts.redirect

了解django.shortcuts.redirect
EN

Stack Overflow用户
提问于 2012-08-14 00:32:43
回答 1查看 4.4K关注 0票数 2

我在理解redirect,或者更确切地说,reverse是如何工作的时候有几个问题。

在主urls.py中,我有:

代码语言:javascript
复制
from django.conf.urls import patterns, include, url
from django.views.generic.simple import redirect_to

urlpatterns = patterns('',
        url(r'^$', redirect_to, {'url': '/monitor/'}),
        url(r'^monitor/', include('monitor.urls')),
)

monitors.urls中,我有:

代码语言:javascript
复制
from django.conf.urls import patterns, include, url 

urlpatterns = patterns('monitor.views',
        (r'^$', 'index'),
        (r'^abc/(?P<id>.*$)', 'abc'),
)   

当您调用/monitor时,我想将其重定向到/monitor/abc,所以我这样做了:

代码语言:javascript
复制
def index(request):
    return redirect("abc")

def abc(render, id=None):
    return render_to_response("monitor/list.htmld", {})

但是我得到了一个NoReverseMatch异常。但当我这么做的时候:

代码语言:javascript
复制
def index(request):
    return redirect("abc/")

然后它突然起作用了。

我不能完全理解为什么。为什么reverseabc上失败了,而在abc/上却没有呢?reverse如何知道重定向也应该包括monitor/?如果我在主urls.py中有另一个名为xyz的应用程序,它也有一个abc视图,会怎么样?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-14 00:38:08

为什么'abc‘的冲销失败,而'abc/’没有?

因为它将其解释为视图名(并且您确实有一个名为'abc'的视图,请参见monitor.urls文件)。这意味着Django将调用reverse来计算URL。值abc/被解释为实际的URL,这意味着Django不会调用reverse来确定URL。

这也解释了reverse失败的原因:名为abc的视图还需要一个名为id的参数。否则Django将无法查找URL,因为没有参数就没有名为abc的视图。

基于the documentation,您应该能够使用以下命令来反转URL:

代码语言:javascript
复制
redirect("abc", id=...)

其中...id参数的值。

以及reverse如何知道重定向也应该包括监视器/?

这是因为它知道哪些URL是可用的,1)它知道名为abc的视图定义在哪里,2)它知道monitors.urls包含在前面的monitor/中。

如果我在主urls.py中有另一个名为"xyz“的应用程序,它也有一个"abc”视图,那会怎么样?

在这种情况下,您必须使用namespaces

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11938458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档