#django #django-urls
Вопрос:
У меня есть несколько путей в моем urls.py
файле для приложения communities
. Вот два из них, которые вызывают проблемы.
path('posts/lt;str:usernamegt;/lt;slug:sluggt;',communities_views.viewPostDetail,name="post_detail")
path('posts/delete_comment/lt;int:comment_idgt;',communities_views.viewDeleteComment,name="delete_comment")
По какой-то причине Джанго, похоже, путается в порядке этих двух путей. Когда в порядке, как показано, Django распознает, что delete_comment
это путь (это означает, что в шаблонах, использующих что-то подобное communities:delete_comment
, не возникает ошибка при создании шаблона), но при попытке перейти по URL-адресу Django продолжает захватывать post_detail
представление и выходит из себя.
Однако, когда я меняю порядок этих двух URL-адресов, все работает нормально. Имеет ли значение порядок? Если это так, то это довольно неудобно для более крупных проектов.
Если потребуется какая-либо другая информация, пожалуйста, дайте мне знать.
Ответ №1:
A slug:…gt;
также может соответствовать последовательности чисел. Если вы таким образом посетите posts/delete_comment/123
сайт , то Django попытается сопоставить его с шаблонами URL-адресов и начнет с первого. Этот URL-адрес будет соответствовать posts/lt;str:usernamegt;/lt;slug:sluggt;/
шаблону, так как он устанавливает username = 'delete_comment'
и slug = '123'
.
Поскольку Django всегда запускает первый соответствующий шаблон URL-адреса, если вы попытаетесь удалить комментарий, он, таким образом, сработает viewPostDetail
.
Что вы можете сделать, так это указать товары в другом порядке:
urlpatterns = [ # ↓ first try to match with the delete_comment URL pattern path('posts/delete_comment/lt;int:comment_idgt;',communities_views.viewDeleteComment,name="delete_comment"), path('posts/lt;str:usernamegt;/lt;slug:sluggt;',communities_views.viewPostDetail,name="post_detail") ]
Другой вариант — создать два шаблона URL-адресов, которые не перекрываются, например, с:
urlpatterns = [ # ↓ non-overlapping URLs path('posts/lt;str:usernamegt;/view/lt;slug:sluggt;',communities_views.viewPostDetail,name="post_detail"), path('posts/delete_comment/lt;int:comment_idgt;',communities_views.viewDeleteComment,name="delete_comment") ]
Комментарии:
1. Идеально! Никогда не знал такого о слизняках, и то, и другое действует как заклинание.