Предположим у нас есть сайт на django, на котором располагается каталог писателей и книг которые они написали. Если с главной страницы перейти на страницу где url будет выглядеть
127.0.0.1:8000/author/w/wollstonecraft-shelley-mary
где в url буква W показывает, что мы перешли по ссылке W которая является категорией для всех писателей чья фамилия начинается на букву W и что мы находимся на странице писателя Wollstonecraft Shelley Mary, однако если мы в url заменим букву W на Q то есть url станет вида
127.0.0.1:8000/author/Q/wollstonecraft-shelley-mary
у нас все равно останется доступ к Wollstonecraft Shelley Mary хотя фамилия этого автора начинается на букву W которая является для него категорией, как избежать такой путаницы?
код для urls.py
urlpatterns = [
path('', views.home, name='home'),
path('author/', views.categoryWords_view, name='author'),
path('author/<str:categoryWords_slug>', views.category_words_view, name='categoryWords'),
path('author/<str:categoryWords_slug>/<categoryAuthors_slug>', views.category_author_view, name='author-page')
]
код для views.py
from django.shortcuts import render, get_object_or_404, redirect
from .models import catWords, catAuthors, catBooks
def home(request):
category_word = catWords.objects.all()
context = {
'category_word': category_word
}
return render(request, 'index.html', context)
def categoryWords_view(request):
category_word = catWords.objects.all()
context = {
'category_word': category_word
}
return render(request, 'list-words.html', context)
def category_words_view(request, categoryWords_slug):
try:
category_word = get_object_or_404(catWords, slug__iexact=categoryWords_slug)
category_author = catAuthors.objects.filter(word=category_word)
breadcrumbs = get_breadcrumbs(request)
context = {
'category_author': category_author,
'category_word': category_word,
'breadcrumbs': breadcrumbs
}
return render(request, 'category-Words.html', context)
except:
return redirect('home')
def category_author_view(request, categoryWords_slug, categoryAuthors_slug):
try:
category_author = get_object_or_404(catAuthors, slug__iexact=categoryAuthors_slug)
category_book = catBooks.objects.filter(author=category_author)
breadcrumbs = get_breadcrumbs(request)
context = {
'category_author': category_author,
'category_book': category_book,
'category_author': category_author,
'breadcrumbs': breadcrumbs,
'categoryWords_slug': categoryWords_slug
}
return render(request, 'category-Authors.html', context)
except:
return redirect('home')