Django - 表单 - (?P<pk>\d+)/$ 代表什么?

6

我是django的新手。我正在使用在线教程创建django中的表单。我不理解urls.py文件中的一行代码。是否有人可以解释一下它的确切含义?

from django.conf.urls import url
from . import views
from . views import BlogListView, BlogDetailView, BlogCreateView

urlpatterns = [
    url(r'^$', views.BlogListView.as_view(), name='post_list'),
    url(r'^post/(?P<pk>\d+)/$', BlogDetailView.as_view(), name='post-detail'),
    url(r'^post/new/$', BlogCreateView.as_view(), name='post_new'),
    url(r'^post/(?P<pk>\d+)/edit/$', BlogUpdateView.as_view(), name='post_edit'),
]

我不理解以下这行的意思:
url(r'^post/(?P<pk>\d+)/$'

"(?P\d+)/$" 是一个正则表达式,它的意思是匹配一个数字并将其作为命名组 "pk" 的值。斜杠后面的 $ 符号表示必须以此结尾。

文档中已经解释了:https://docs.djangoproject.com/en/1.11/topics/http/urls/#named-groups - Klaus D.
1
远离Django以外的任何网站上的教程。它们都没有深入地解释事情。我认为每次你需要理解一个基本的东西,你都必须提出一个问题并等待另外半个小时的答案,这是一种巨大的时间浪费。Django文档有一个优秀的七部分教程,实际上解释了你需要知道的几乎每一个概念,让你可以开始使用。 - xyres
2个回答

22

这是一个正则表达式,用于与实际URL匹配。

在此,r''指定该字符串为原始字符串。'^'表示开始,而$表示结尾。

现在,当'<>'内部出现'pk'时,它代表一个主键。主键可以是任何东西,例如字符串、数字等。主键用于区分表的不同列。

这里写着:

<pk>\d+

\d 表示匹配数字字符(包括0-9等其他数字)。

“+”表示数字字符至少必须存在一个或多个。

所以,

.../posts/1 是有效的

.../posts/1234 是有效的

.../posts/ 不是有效的,因为数字字符中必须至少有1个

现在,这个数字作为参数发送到 BlogListView 中,您可以使用该主键运行所需的操作。


1

您的BlogDetailView必须具有'id'作为参数,以捕获要更新的博客文章

这将捕获所选博客文章的'id'并将其传递给BlogDetailView

url(r'^post/(?P<pk>\d+)/$'

例如: 对于url:http://localhost:8000/post/2 2将被捕获,并作为'id'传递到BlogDetailView


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接