在Django中通过URL传递参数时找不到页面

时间:2012-05-07 19:25:38

标签: python regex django

我怀疑这可能与我设计正则表达式的方式有关,因为当我尝试转到http://127.0.0.1:8000/recipes/search/fish/时,我得到以下输出...

使用gfp.urls中定义的URLconf,Django按以下顺序尝试了这些URL模式:

^recipes/$
^recipes/category/(?P<category>\d+)/$
^recipes/search/(?P<term>\d+)/$
^recipes/view/(?P<slug>\d+)/$
^admin/

当前网址recipes / search / fish /与其中任何一个都不匹配。

此处参考是我的URLconf

urlpatterns = patterns('',
url(r'^recipes/', 'main.views.recipes_all'),
url(r'^recipes/category/(?P<category>\d+)/$', 'main.views.recipes_category'),
url(r'^recipes/search/(?P<term>\d+)/$', 'main.views.recipes_search'),  
url(r'^recipes/view/(?P<slug>\d+)/$', 'main.views.recipes_view'),

此处参考我正在尝试使用的观点

def recipes_all(request):
    return HttpResponse("this is all the recipes")

def recipes_category(request, category):
    return HttpResponse("this is the recipes category % s" % (category))

def recipes_search(request, term):
    return HttpResponse("you are searching % s in the recipes" % (term))

def recipes_view(request, slug):
    return HttpResponse("you are viewing the recipe % s" % (slug))

我怀疑这是我的正则表达,有人能够解释它有什么问题吗?我已经看到/ w(?)用于某些url正则表达式,但它不会在Django tuorial中进入它:

https://docs.djangoproject.com/en/1.4/intro/tutorial03/

2 个答案:

答案 0 :(得分:2)

'^recipes/search/(?P<term>\d+)/$'匹配/recipes/search/123456/'^recipes/search/(?P<term>[-\w]+)/$'可能就是你所需要的。 (用连字符更新)

查看Python re个文档,了解'\ d','\ w'和其他人的意思。

答案 1 :(得分:1)

recipe/search的你的urlpattern只允许搜索字词的数字(\d)。将其更改为\w,您应该做得很好。