0

我正在使用 Django urls.py 从 URL 中提取一个值,这是我的urls.py

urlpatterns = patterns('',
    url(r'^word/(?P<w>.+)/$', 'myapp.views.word'),
    url(r'^word/(?P<w>.+$)/action/', 'myapp.views.action'),)

第一项:myapp.views.word运行良好并接受输入的变量:/word/asdf并且我能够操纵asdf我在views.py中的选择方式。第二项myapp.views.action给了我错误

Exception Value:    
Word matching query does not exist. Lookup parameters were {'word__iexact': u'asdf/action'}

这是我的一部分views.py

def action(request, w):
    o = Word.objects.get(word__iexact=w)

我想当用户去的时候,我可以在参数/word/asdf/action上运行我的action视图。asdf我究竟做错了什么?

4

2 回答 2

2

您放错$了位置,这就是该操作在您的参数中的原因

urlpatterns = patterns('',
    url(r'^word/(?P<w>.+)/$', 'myapp.views.word'),
    url(r'^word/(?P<w>.+)/action/$', 'myapp.views.action'),)
于 2013-03-12T10:23:41.190 回答
1

您收到此错误是因为r'.+'也匹配“/”字符,并且它表现得很贪婪,因此它匹配 URL 的所有最后部分。出于这个原因,您永远不会调用第二个定义,两者都/asfd//asfd/action/匹配^word/(?P<w>.+)/$ (请参阅https://docs.djangoproject.com/en/dev/topics/http/urls/#how-django-processes-a-request,点 # 3)

在你的 url.py 中试试这个:

 url(r'^word/(?P<w>.+)/(?P<action>.+)/$', 'myapp.views.action'),)

在你的views.py中

def action(request, w, action):
    o = Word.objects.get(word__iexact=w)
    # do something with "action" variable and "o" object
    #...

否则,您可以像这样简单地使用不那么贪婪的正则表达式:

     url(r'^word/(?P<w>\w+)/$', 'myapp.views.word'),)
     url(r'^word/(?P<w>\w+)/action/$', 'myapp.views.action'),)
     url(r'^word/(?P<w>\w+)/draw/$', 'myapp.views.draw'),)
     # and so on...

有关更多详细信息,您可以随时参考 python 文档(http://docs.python.org/2/library/re.html#regular-expression-syntax

于 2013-03-12T10:17:36.040 回答