使用正则表达式的Django URL问题

时间:2016-01-08 23:04:23

标签: regex django django-urls

我是Python,Django 1.9和整体正则表达式的新手。所以我想在urls.py

中写这样的东西
search/doc_name/language/?id
  1. 其中doc_name,允许任何名称/案例/长度等,如下所示:'My Fave Doc 12'
  2. 其中语言,允许两个字母,如:'en'
  3. 其中id,仅允许数字
  4. 这就是我所拥有的,有人可以指出我哪里出错了吗?

    url(r'^search/[\w-]+/[a-z]{2}+/(?P<id>[0-9]+)$', '....
    

2 个答案:

答案 0 :(得分:2)

doc_name不允许空格。如果需要,可在字符集中添加空格。确保将它放在短划线([\w -]+)之前。如果允许使用其他空格,则使用\s代替([\w\s-]+)。

此外,该语言目前还可匹配任何数量的字母。移除+并仅保留[a-z]{2}+表示重复一次或多次,默认情况下任何内容只匹配一次。

答案 1 :(得分:0)

你应该真的避免在你的URL中有空格,我建议如下:

网址格式: /search/<doc_name>/<id>/?lang=<language>

urls.py

url(r'^search/(?P<doc_name>[\w]+)/(?P<id>[0-9]+)/$'), your_view)
views.py

中的

lang = request.GET.get('lang', 'en')
doc_name = request.POST.get('doc_name')
id = request.POST.get('id')