代码之家  ›  专栏  ›  技术社区  ›  LeeMobile

Django Url未使用查询参数解析

  •  1
  • LeeMobile  · 技术社区  · 16 年前

    我有一个问题,需要为GET请求传入查询参数,但是Django没有正确地解析视图的URL。

    My url.py如下所示:

       from django.conf.urls.defaults import * 
       urlpatterns = patterns('',
           url(r'^confirm_cancel',
              'myapp.views.confirm_cancel_method',
               name='myapp_confirm_cancel'),
           )
    

    当我转到/confirm\u cancel?some\u id=x时,我得到一个404,告诉我“No MyModel matches query”。当我在视图处理程序中设置断点时,当我转到那个url时,它不会被命中。

    但是,如果我转到/confirm\u cancel/x/,我的视图断点就会被命中。

    还有一点需要注意的是,它在Django1.1中工作过,但在我升级到1.2之后就坏了。

    谢谢!

    4 回复  |  直到 16 年前
        1
  •  1
  •   ars    16 年前

    我不认为问题出在你的网址上。你用的是快捷方式吗 get_object_or_4o4 在你的视野里?例如:

    get_object_or_404(MyModel, pk=99)
    

    如果表中没有主键为99的记录,将导致“No MyModel matches”查询。

        2
  •  1
  •   Jordan Reiter    16 年前

    理想情况下,它应该是这样的:

    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 将匹配。修复模式至少可以解决这个问题。

        3
  •  1
  •   karthikr    12 年前

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

    下一次我将学习粘贴所有内容,而不是挑选我认为有问题的代码行。

    奇怪的是,这并没有导致django1.1崩溃。。。我猜是1.2版本修复的一个bug

        4
  •  0
  •   Manoj Govindan    16 年前

    你查过这是否是一起 trailing slash ?