Задать вопрос
@Oyaseo
beginner programmist

Что не так с моей функцией?

Хочу сделать одну функцию для поиска конкретной статьи, поиска статей по определённой рубрике, и по тегам. Статью получаю нормально, на рубрике получаю пустой список, а вот на тегах вообще 404 :( что не так?
Вот примеры:
localhost/pishem-prostoi-parser - статья
localhost/praktika-python - рубрика
localhost/python - тег
Вот моя функция:
def article(request, alies):
    args = {}
    args.update(csrf(request))
    try:
        args['article'] = Article.objects.get(alies=alies)
    except Article.DoesNotExist:
        head_id = get_object_or_404(Heading, heading_alies=alies)
        args['article'] = Article.objects.filter(article_heading=head_id.id)
        if not args['article']:
            tag_id = get_object_or_404(Tag, tag_alies=alies)
            args['article'] = Article.objects.filter(tags=tag_id.id)
        else:
            pass
    args['heading'] = Heading.objects.all()
    return render_to_response('article.html', args)
  • Вопрос задан
  • 356 просмотров
Подписаться 1 Оценить 1 комментарий
Решения вопроса 1
shultais
@shultais
Обучаю программированию на Python и SQL
Если у вас находится Heading со значением praktika-python и для этого Heading нет статей, то дальше происходит попытка получить тег с названием praktika-python. Так как тег у вас называется python, то очевидно, что тут 404.

Если вы просто вбиваете тег python, то 404 уже на строке
head_id = get_object_or_404(Heading, heading_alies=alies)


PS.
Вот так не надо писать, вы получаете head, а не head_id
head_id = get_object_or_404(Heading, heading_alies=alies)

правильно
heading = get_object_or_404(Heading, heading_alies=alies)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
syschel
@syschel
freelance/python/django/backend
get_object_or_404() (source)
Найти один объект, если не найден то показать 404
У вас на поиске Heading, не находит его и выдаёт исключение (raise Http404), дальше не идёт выполнение кода. Так же будет ошибка если в базе найдётся больше одного объекта. Тоже выплюнет исключение в 404.
Ответ написан
torrie
@torrie
Всё знаю, всё умею
article_heading=head_id.id неверно
если у тебя foreign_key то объекты надо сравнивать
article_heading=head_id
Ответ написан
Комментировать
@Oyaseo Автор вопроса
beginner programmist
Переделал вот так, в результате получаю и в рубриках и в тегах пустой список, хотя и тег и рубрика существуют.
def article(request, alies):
    args = {}
    args.update(csrf(request))
    try:
        args['article'] = Article.objects.get(alies=alies)
    except Article.DoesNotExist:
        try:
            head_id = Heading.objects.get(heading_alies=head_id)
            args['article'] = Article.objects.filter(article_heading=head_id.id)
        except Heading.DoesNotExist:
            tag_id = get_object_or_404(Tag, tag_alies=alies)
            args['article'] = Article.objects.filter(tags_id=tag_id.id)
    args['heading'] = Heading.objects.all()
    return render_to_response('article.html', args)
Ответ написан
Ваш ответ на вопрос

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

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