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

What does this regex mean in django?

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

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 以及它们之间的 - 是什么?

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

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

等等

如果您正在学习高级 urls,我想您了解基本 url 标记的工作原理。 每当我们处理变量 url 模式时都会使用正则表达式模式,例如对于博客,urls 可能读作

  • 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<> :定义我们在定义一个变量
  • <text> : 文本是你的变量名
  • \w+ :是你的正则表达式,它定义了可接受的模式(在这种情况下 \w 代表集合 [0-9a-zA-Z_]+代表任意次数的重复。如果你想了解更多,我会参考https://www.ntu.edu.sg/home/ehchua/programming/howto/Regexe.html for reference and http://regexr.com/进行练习。
  • 和中间的 - 只是一个强制性文本,可以用 -no-[=72= 代替] 看起来像 domain.com/page-no-1/

标记的其余部分类似于正常的 urls,这意味着以给定模式 (?P<page_slug>\w+)-(?P<page_id>\w+)/ 开头的任何 url后缀由上述视图处理。

例如- 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

在基于 class 的视图中访问您使用 self.argsself.kwargs 的 url 参数,因此您可以通过 [=29 访问它=]