2010-08-11 150 views
1

我有一个问题,我需要传递GET请求的查询参数,但Django无法正确解析该视图。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时它不会受到影响。

但是,如果我goto/confirm_cancel/x /,我的视图断点确实被击中。

还有一点需要注意的是,这个工作在Django 1.1中,但是自从我升级到1.2以后,现在已经被破坏了。

有什么想法?

谢谢!

+2

后视图代码,如果你不希望人们浪费时间猜测事情的错误。 – 2010-08-11 17:26:43

回答

1

我在我的文章中复制了urls.py中的所有其他url模式。

原来问题是我在urlpatterns的顶部有一个r'^(?P<my_id>\w+)/?$'

下一次,我将学习粘贴所有东西,而不是樱桃选择我认为是违规的代码行。

奇怪的是,这并没有引起Django的1.1打破......我想这是固定在1.2

+1

很高兴它已修复。继续并接受你自己的答案,这样问题就被认为解决了(对于面临这个问题的其他人而言,这个解决方案显而易见)。 – ars 2010-08-11 19:02:49

+0

我几乎问清楚列表中是否有匹配的url模式。 – 2010-08-11 19:30:47

0

您是否检查过这是否是trailing slash的情况?

+0

是的,斜线或没有斜线,它仍然失败。 – LeeMobile 2010-08-11 17:18:20

1

我不认为问题是与您的网址。您在视图中的某处是否使用了诸如get_object_or_4o4之类的快捷方式?例如:

get_object_or_404(MyModel, pk=99) 

将导致“不匹配为MyModel给定的查询,如果有没有在你的表中的记录与99

+0

是的,我正在使用get_object_or_404(),但在该行命中之前,我放入了一个调试断点,并且该断点没有受到任何影响。所以这不是它扔404的地方。 – LeeMobile 2010-08-11 17:17:19

+0

试图缩小它...你粘贴的错误消息表明*模型*没有找到问题,而不是URL处理程序。它可能有助于粘贴视图代码和整个堆栈跟踪。 – ars 2010-08-11 17:28:58

+0

+1好推理。 – 2010-08-11 17:50:06

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/将匹配的URL。现在因为你没有结尾$任何以confirm_cancel开头的东西都会匹配。修复这个模式至少可以解决这个问题。