Python <;int:pk>;及<;pk>;?

Python <;int:pk>;及<;pk>;?,python,django,django-urls,Python,Django,Django Urls,假设我们正在用django实现一个简单的博客,并且可以通过URL访问博客文章,如/posts/1/,/posts/2/等 当我们在urlpatterns数组中定义路径变量时,使用 path('post/',…,…)和path('post/',…,…) 这只是一种良好的做法吗?有实际的好处吗 这只是一种良好的做法吗?有实际的好处吗 是。它使路径更加具体,并允许写入没有重叠模式的其他路径 int:部分是一个。如果未指定路径转换器,将使用str路径转换器 它指定将使用的正则表达式。例如,has as

假设我们正在用django实现一个简单的博客,并且可以通过URL访问博客文章,如
/posts/1/
/posts/2/

当我们在urlpatterns数组中定义路径变量时,使用
path('post/',…,…)
path('post/',…,…)

这只是一种良好的做法吗?有实际的好处吗

这只是一种良好的做法吗?有实际的好处吗

。它使路径更加具体,并允许写入没有重叠模式的其他路径

int:
部分是一个。如果未指定路径转换器,将使用
str
路径转换器

它指定将使用的正则表达式。例如,has as regex:

因此,这些正则表达式替换路径中的
。如果您这样简单地编写
,那么它也会为
post/foobar
触发。你本身并不想要这个。例如,如果以后有其他路径:

    path('post/<int:pk>/', some_view),
    path('post/new/', other_view),
path('post/',一些视图),
路径('post/new/',其他视图),

如果您要编写
,那么
post/new
路径也会启动
some\u视图
视图,而不是
other\u视图
,因为
str:
路径转换器也与
new

匹配。您想接受不是整数的
pk
值吗?不,不一定。让我们假设所有的
pk
值都是整数。如果您使用
,那么您的视图一定会收到一个实际的整数值。否则,您必须自己解析整数,并处理传递非整数字符串值时出现的任何错误。
class StringConverter:
    regex = '[^/]+'

    def to_python(self, value):
        return value

    def to_url(self, value):
        return value
    path('post/<int:pk>/', some_view),
    path('post/new/', other_view),