Вы определили строку с префиксом re'..'
.Но у Python нет префикса re'..'
.
Он имеет префикс r'..'
, и это не означает "регулярное выражение", но "raw ", не означает, что вы создали регулярное выражение, но более того, что если вы напишите, например, r'foo\nbar'
, вы не написали новую строку символ ('\n'
), но вы пишете обратную косую черту r'\'
(или '\\'
для обычной строки), за которой следует символ 'n'
.Это необходимо, поскольку, если вы создаете регулярное выражение, обратные слэши должны по-прежнему состоять из отдельных символов.
Таким образом, вы можете переписать его следующим образом:
urlpatterns = [
# r instead of re
re_path(<b>r</b>'^details/(?P\d+)/$', views.details),
path('', views.index)
]
Python также имеет f'..'
строк (чтоможет содержать переменные, которые затем форматируются), и b'..'
строки (для двоичных строк), но они не имеют большого значения в случае urlpatterns
.
Таким образом, вы не per se нужно использовать префикс r'..'
вообще.Но в этом случае вы должны убедиться, что вы избежали обратной косой черты.Это затрудняет написание и чтение.Поэтому r'..'
, вероятно, лучший способ написания регулярных выражений.