这个正则表达式在 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_slug
和 page_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.args
或 self.kwargs
的 url 参数,因此您可以通过 [=29 访问它=]
我正在从一本书中学习 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_slug
和 page_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.args
或 self.kwargs
的 url 参数,因此您可以通过 [=29 访问它=]