Python <;int:pk>;及<;pk>;?
假设我们正在用django实现一个简单的博客,并且可以通过URL访问博客文章,如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
/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),