Python 这个正则表达式在django中是什么意思?

Python 这个正则表达式在django中是什么意思?,python,regex,django,django-urls,Python,Regex,Django,Django Urls,我正在从一本书中学习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/$', vi

我正在从一本书中学习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),
    ])),
]
urlpatterns=[
url(r'^(?P\w+)-(?P\w+/),
包括([
url(r“^history/$”,views.history),
url(r“^edit/$”,views.edit),
url(r“^display/$”,views.display),
url(r“^permissions/$”,views.permissions),
])),
]
我知道这是关于消除冗余,但它实际上是如何工作的?
您从哪里获得
page\u slug
page\u id
以及它们之间的-是什么?

此正则表达式与以下URL匹配:

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

etc

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

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

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

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

  • ?P
    :定义我们正在定义一个变量
  • :text是变量的名称
  • \w+
    :您的正则表达式定义了可接受的模式(在本例中,w表示集合中的任何内容
    [0-9a-zA-Z_2;]
    +
    表示任意数量的重复。如果您想了解更多信息,我将参考以供实践
  • 而中间的
    -
    只是一个强制文本,可以用say
    -no-
    替换,看起来像
    domain.com/page-no-1/
其余的标记类似于普通url,这意味着任何以给定模式
(?p\w+)-(?p\w+)/
开头,后跟后缀的url都由所述视图处理

e、 g.-
domain.com/post-1/history/
-由
视图处理。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

在基于类的视图中访问url参数时,您使用
self.args
self.kwargs
,因此您可以通过执行
self.kwargs['page_slug'来访问它

在这篇文章中有很多解释。很好的解释,理解了一切,顺便说一句,在这个例子中,我必须向每个函数添加page\u slug和page\u id,对吗?如何从html模板中使用/调用这两个参数(即page\u slug,page\u id)?如下: