我有一个问题,我需要传递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后现在已经破了。
有什么想法吗?
谢谢!
答案 0 :(得分:1)
我认为问题不在你的网址上。您是否在视图中的某个位置使用了get_object_or_4o4
这样的快捷方式?例如:
get_object_or_404(MyModel, pk=99)
如果您的表中没有主键为99的记录,将导致“没有MyModel匹配给定查询。
答案 1 :(得分: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
开头的任何内容都会匹配。修复模式至少可以解决这个问题。
答案 2 :(得分:1)
我在帖子中的urls.py中复制了所有其他网址模式。
原来问题是我r'^(?P<my_id>\w+)/?$'
顶部的其中一个网址有urlpatterns
。
下次我将学会粘贴所有东西而不是樱桃选择我认为是令人讨厌的代码行。
奇怪这不会导致Django 1.1破解......我猜这是一个在1.2中修复的错误
答案 3 :(得分:0)
您是否检查过这是trailing slash的情况?