这个正则表达式在django中意味着什么?

时间:2017-01-09 13:25:41

标签: python regex django django-urls

我正在从一本书中学习django而且我已经进入了高级网址,在这里有一个正则表达式没有解释:

urlpatterns = [
    url(r'^(?P<page_slug>\w+)-(?P<page_id>\w+)/',
        include([
        url(r'^history/$', views.history),
        url(r'^edit/$', views.edit),
        url(r'^discuss/$', views.discuss),
        url(r'^permissions/$', views.permissions),
    ])),
]

我知道这是关于删除冗余,但它是如何实际工作的? 你从哪里得到page_slugpage_id以及它们之间有什么关系?

2 个答案:

答案 0 :(得分:2)

如果您要转到高级网址,我认为您了解基本网址标记的工作原理。 每当我们处理可变url模式时,就会使用正则表达式模式。如果是博客,网址可能会显示为

  • domain.com/post-1/
  • domain.com/post-2/

  • domain.com/shortpost-1/
  • domain.com/shortpost-2/

等等。

我们可以在这里看到一个常见的模式,它可以作为页面slug(或前缀)和page / post id相关。 所以我们创建了两个变量,即page_slug和page_id。 (注意:像其他地方一样的变量名称可以根据自己的喜好重命名。 因此正则表达式创建为/(?P<page_slug>\w+)-(?P<page_id>\w+))/' 其中:

  • ?P<> :定义我们正在定义变量
  • &LT;的 text &GT; :text是您的变量名称
  • \w+ :是您的正则表达式,用于定义可接受的模式(在这种情况下\ w表示集合[0-9a-zA-Z_]中的任何内容,+代表任何数字如果你想了解更多信息,请参考https://www.ntu.edu.sg/home/ehchua/programming/howto/Regexe.html作为参考,http://regexr.com/进行练习。
  • 中间的 - 只是一个强制性文字,可以用 -no- 替换为 { {1}}

标记的其余部分类似于普通网址,这意味着任何以给定模式开头的网址 domain.com/page-no-1/ 后跟后缀都会被上述视图所取代。

e.g。 - (?P<page_slug>\w+)-(?P<page_id>\w+)/ - 由domain.com/post-1/history/处理,依此类推。

现在重要的部分是这些变量名称如何影响您的视图。 如果您使用的是基于功能的视图,则您的历史记录视图将定义为:

views.history

在基于课程的视图中,您可以使用def history(request, page_slug, page_id): #Your code using the two variables received. #These might be values stored in db to dynamically fetch values self.args访问网址参数,以便通过 self.kwargs

来访问它

答案 1 :(得分:0)

此正则表达式匹配以下网址:

/abc-def/history/ (abc goes to page_slug and def to page_id)
/ghi-jkl/edit/