@HarreVerres

Путаница в url с несуществующими категориями Django?

Предположим у нас есть сайт на 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')
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Everything_is_bad
Ну так сделай в category_author_view сначала фильтрацию по categoryWords_slug
а за подобный except сразу выгоняют на улицу
Ответ написан
Комментировать
@HarreVerres Автор вопроса
С уверенностью можно сказать, что комьюнити мертво. За сутки вопрос так и не получил ответа, а лишь какой-то комментарий. Для сравнения ChatGPT 3.5 на этот же самый вопрос дал полное и хорошо прокомментированное решение за считанные секунды.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы