Django URL 使用查询参数不解析
我遇到了一个问题,我需要在GET请求中传递查询参数,但Django没有正确解析URL到视图。
我的urls.py文件是这样的:
from django.conf.urls.defaults import *
urlpatterns = patterns('',
url(r'^confirm_cancel',
'myapp.views.confirm_cancel_method',
name='myapp_confirm_cancel'),
)
当我访问 /confirm_cancel?some_id=x 时,我收到一个404错误,提示“没有匹配的MyModel。”当我在视图处理程序中设置断点时,访问这个URL时并没有触发断点。
但是,如果我访问 /confirm_cancel/x/,我的视图断点就会被触发。
还有一点需要注意,这在Django 1.1中是可以正常工作的,但自从我升级到1.2后就出现了问题。
有什么想法吗?
谢谢!
4 个回答
1
我们需要看看对应的视图函数里面有什么。
理想情况下,它应该像这样:
def confirm_cancel_method(request, some_id=None):
some_id = request.REQUEST.get('some_id', some_id)
some_record = get_object_or_404(SomeModel, pk=some_id)
...
更新
抱歉,刚看到你提到的断点。我要推荐的一件事是把配置改成这样:
from django.conf.urls.defaults import *
urlpatterns = patterns('',
url(r'^confirm_cancel/?$',
'myapp.views.confirm_cancel_method',
name='myapp_confirm_cancel'),
)
在末尾加上 /?$
的意思是只有 /confirm_cancel
或 /confirm_cancel/
这两个地址会匹配到这个网址。现在因为你没有加上结尾的 $
,所以任何以 confirm_cancel
开头的地址都会匹配。修正这个模式至少能解决这个问题。
1
我觉得你遇到的问题可能不是出在你的网址上。你在视图里有没有用到像 get_object_or_404
这样的快捷方式?比如说:
get_object_or_404(MyModel, pk=99)
如果你的表里没有主键为99的记录,这样就会出现“没有找到符合条件的MyModel”的提示。
1
我在我的帖子里把urls.py中的所有网址模式都复制出来了。
结果发现问题出在我在urlpatterns
最上面有一行r'^(?P<my_id>\w+)/?$'
的代码。
下次我会学着把所有的代码都粘贴上去,而不是只挑我认为有问题的那几行。
奇怪的是,这并没有导致Django 1.1崩溃……我想这应该是个在1.2版本中修复的bug。