[英]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
以及它们之间的-是什么?
如果您要使用高级网址,我想您理解基本网址标记的工作原理。 每当我们处理可变的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<page_slug>\\w+)-(?P<page_id>\\w+))/'
,其中:
?P<>
:定义我们正在定义一个变量 text
>:text是您变量的名称 \\w+
:是您的正则表达式,用于定义可接受的模式(在这种情况下,\\ w表示集合[0-9a-zA-Z_]
任何内容,而+
表示任意数量的重新排列。如果您想了解更多有关此信息的信息,请参考https://www.ntu.edu.sg/home/ehchua/programming/howto/Regexe.html以获取参考,并请http://regexr.com/获得有关实践。 -
之间仅仅是这可能被替换为文本必须放说-no-
看起来像domain.com/page-no-1/
其余的标记与普通url相似,这意味着以给定模式(?P<page_slug>\\w+)-(?P<page_id>\\w+)/
开头的所有url都由上述视图处理。
例如- domain.com/post-1/history/
-由handeled 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
在基于类的视图中访问url参数时,可以使用self.args
或self.kwargs
因此您可以通过self.kwargs['page_slug']
来访问它
此正则表达式与以下网址匹配:
/abc-def/history/ (abc goes to page_slug and def to page_id)
/ghi-jkl/edit/
等等
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.