@nikweter
Системный администратор

Почему в некоторых видео по django в шаблоне проверяется прямо не передающаяся переменная?

Все еще в свое удовольствие ковыряю Django и столкнулся с одной странностью.
В некоторых мануалах работает примерно следующий код:
views.py
def post_detail(request, year, month, day, post):
    post = get_object_or_404(Post, slug = post, status='published', publish__year = year,
                             publish__month=month, publish__day=day)
    comments = post.comments.filter(active = True)
    if request.method == 'POST':
        comment_form = CommentForm(data=request.POST)
        if comment_form.is_valid():
            new_comment = comment_form.save(commit=False)
            new_comment.post = post
            new_comment.save()
    else:
        comment_form = CommentForm()
  

    return render(request, 'blog/post/detail.html', {'post': post, 'comments': comments, 'comment_form': comment_form})


detail.html
{% if new_comment %}
        <h2>Your comment has been added.</h2>
    {% else %}


У меня в шаблоне new_comment всегда False. Да, я могу передать его в render и там где он не нужен присвоить False.

Но почему у других работает?
  • Вопрос задан
  • 200 просмотров
Пригласить эксперта
Ответы на вопрос 3
@YellowTriangleMKV
Насколько мне известно код как здесь:
{% if new_comment %}
        <h2>Your comment has been added.</h2>
{% else %}

Будет корректно работать в Джанго шаблоне, даже если эта переменная не была передана при рендере. Просто она там будет иметь значение None.
Возможно в вашем мануале добавлена эта переменная в шаблон "на будущее" и в следующих уроках мануала она будет передаваться при рендере. А возможно просто ошибка или тупая копипаста с какого-то другого ресурса, гадать не могу.
Ответ написан
@ivlevdenis_ru
python, django, celery, redis, kivy, git
Просто зыбыли положить в контекст
Ответ написан
Комментировать
Konstantin18ko
@Konstantin18ko
Стоматолог
Не уверен, но стоит попробовать
return render(request, 'blog/post/detail.html', locals())
Ответ написан
Ваш ответ на вопрос

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

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