【问题标题】:Regular Expression on Django doesn't workDjango上的正则表达式不起作用
【发布时间】:2017-06-26 09:58:23
【问题描述】:

我对Django比较陌生,所以我在做this tutorial,但是我遇到了正则表达式的问题:

对于这个视图

def viewArticle(request, month, year):
     text = "Displaying articles of : %s/%s"%(year, month)
     return HttpResponse(text)

我应该创建一个这样的网址

url(r'^articles/(\d{2})/(\d{4})', 'viewArticles', name='articles')

而且效果很好,例如当我输入 http://.../articles/12/2014 时,我应该得到“正在显示:12 / 2014 的文章”。

但是,稍后(在 PDF 的第 27 页)建议我将 url 更改为:

url(r'^articles/(?P\d{2})/(?P\d{4})', 'viewArticles', name='articles'),

现在它不再起作用了。为什么会这样,我该如何更改我的代码?感谢您的任何建议!

【问题讨论】:

  • 不,不是(?P\d{2}),而是(?P<name>\d{2})
  • 警告:该教程适用于相当老的 Django 版本。我认为 Django 文档写得很好,可以作为标准参考。

标签: python regex django


【解决方案1】:

教程说你可以在这里使用named capturing groups

(?P<name>...)
类似于常规括号,但组匹配的子字符串可通过符号组名称 name 访问。组名必须是有效的 Python 标识符,并且每个组名只能在正则表达式中定义一次。符号组也是一个编号组,就好像该组没有命名一样。

命名捕获组的正确声明是(?P<name>...)

url(r'^articles/(?P<month>\d{2})/(?P<year>\d{4})', 'viewArticles', name='articles')

【讨论】:

猜你喜欢
  • 2020-08-31
  • 2014-09-02
  • 2016-07-21
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
相关资源
最近更新 更多