Это просто хорошая практика? Есть ли реальные преимущества?
Да . Это делает путь более конкретным c и позволяет записывать другие пути, не имеющие перекрывающихся шаблонов.
Часть int:
представляет собой преобразователь пути [Django -doc] . Если вы не укажете преобразователь пути, будет использоваться преобразователь пути str
.
Он указывает регулярное выражение, которое будет использоваться. Например, IntConverter
[GitHub] имеет как регулярное выражение:
class IntConverter:
<b>regex = '[0-9]+'</b>
def to_python(self, value):
return int(value)
def to_url(self, value):
return str(value)
, тогда как StringConverter
[GitHub ] использует:
class StringConverter:
<b>regex = '[^/]+'</b>
def to_python(self, value):
return value
def to_url(self, value):
return value
Таким образом, это регулярные выражения, заменяющие <int:pk>
или <str:pk>
в пути. Если вы просто напишете <pk>
, он также сработает для post/foobar
. Вы сами по себе этого не хотите. Например, если позже у вас будет другой путь:
path('post/<b><int:pk></b>/', some_view),
path('post/new/', other_view),
Если вы напишете <pk>
, тогда путь post/new
также запустит представление some_view
, а не other_view
, поскольку * Конвертер пути 1046 * также соответствует new
.