перед тем, как я нырну, давайте согласимся, что слаг - это просто причудливое имя, это просто строка, ничего больше.
Хорошо, так что вы хотите понять, как работают URL-адреса django. Отключите PLZ
Давайте сначала разберемся, как работают URL, скажем, я открою этот сайт www.example.com и просто открою его как есть, Сайт просто открываетсяправильно? Вы ожидаете, что домашняя страница будет там
Теперь давайте откроем ее как www.example.com?text=welcome
Нажмите F12 вChrome и перейти на вкладку сети. По сути, вы добавили параметр, который отображается в chrome как «параметр строки запроса» в самом низу вкладки сети. Это говорит о том, что вы хотите посетить этот веб-сайт с параметром, который называется text, который содержитстрока привет
Хорошо , какова связь между этим и вопросом? потерпите меня, пожалуйста
Представьте, что у меня есть социальный веб-сайт с сообщениями, и я хочу создать код «слизняк» для каждого сообщения, чтобы при вводе в качестве параметра в URL он получал конкретное сообщение
сейчас это ваш urlpatterns.py
path('post_detail/<slug:slug>', views.post_detail, name='single'),
path('', views.show_index, name='index'),
Я предполагаю, что это простота проекта urls.py для уровня.
Пользователь заходит на сайт без каких-либоurl params или подстраницы, он просто вызывает ваш views.show_index
, теперь пользователь посещает ваш website/post_detail/
, что происходит, если он видит, есть ли какой-либо urlpattern в urlpatterns, который соответствует этому, но это не так, так что это простоa 404
теперь пользователь посещает ваш website/post_detail/ANY_RANDOM_TEXT
В результате получается, что на самом деле существует urlpattern, который соответствует website/post_detail/ANY_RANDOM_TEXT
, что path('post_detail/<slug:slug>', views.post_detail, name='single')
, следовательно, "ANY_RANDOM_TEXT"должен быть слаг, давайте тогда возьмем его за слаг!
теперь у нас есть слаг, и urlpattern вызовет views.post_detail (function или view) и передаст ему слаг, поэтому мы должны принятьэто правильно?
def post_detail(request, slug):
post = get_object_or_404(Post, slug=slug)
return render(request, 'blog_application/templates/single.html',
{'post':post})
теперь у вас есть доступ к 'slug', который является просто "ANY_RANDOM_TEXT", потому что мы сопоставили его, теперь получите сообщение с slug, которое совпадает с slug в url, и просто отобразите его!
Кстати, не забывайте косую черту в конце любого urlpattern, иначе мир взорвется