Django, HTML шаблон, для цикла не работает должным образом - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь применить цикл for к следующему html (в проекте Django) так, чтобы поля «Имя» и «Комментарии» повторялись в представлении html.

Когда явставьте шаблонный код, то есть:

{% for c in comments %}
{% endfor %}

по обе стороны от содержимого, которое я хочу повторить, это просто приводит к тому, что имя и комментарии полностью исчезают и не дают желаемого результата.

Соответствующие части файла приведены ниже:

index.html (главная HTML-страница)

{% load static %}
<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="{% static 'guestbook/styles.css' %}">
</head>
<body>

<h1>The world's guestbook</h1>
<p><a href="{% url 'sign' %}">Sign </a>the guestbook</p>
{% for c in comments %}
<h2>Name</h2>


<p>This the message that the user leaves.</p>

{% endfor %}
</body>
</html>

views.py (в гостевой книге)приложение)

from django.shortcuts import render
from .models import Comment

# Create your views here.

def index(request):
    comments = Comment.objects.order_by('-date_added')
    context ={'comments': comments}
    #name=Name.objects.order_by('-date_added')

    return render(request,'guestbook/index.html')


def sign(request):
    return render(request,'guestbook/sign.html')

файл models.py

from django.db import models
from django.utils import timezone

# Create your models here.

class Comment(models.Model):
    name=models.CharField(max_length=20)
    comment=models.TextField()
    date_added=models.DateTimeField(default=timezone.now)
    def __str__(self):
        return self.name    

Я работаю над учебником, в котором это рекомендуемый код и желаемый результаткак и ожидалось - я заметил, что мой HTML-шаблон не имеет тегов div и задаюсь вопросом, может ли это быть проблемой?Если да, то как это можно решить?

enter image description here

1 Ответ

1 голос
/ 09 апреля 2019

Вам нужно передать этот контекст:

def index(request):
    comments = Comment.objects.order_by('-date_added')
    context ={'comments': comments}
    return render(request,'guestbook/index.html', context=context)
                                                  ^^^^^^^^^^^^^^^

Из документации по визуализации :

Контекст: Словарь значений для добавления в контекст шаблона. По умолчанию это пустой словарь. Если значение в словаре вызываемый, представление вызовет его непосредственно перед отображением шаблона.

То есть значения внутри словаря, который используется с известным аргументом context функции рендеринга, эти значения будут отправлены в шаблон. Затем вы можете получить доступ к этим значениям через {{ key }} словаря (который отправляется как контекст) в html-шаблоне или в вашем случае {{ comments }}. Более подробную информацию о контексте можно найти в этом ответе SO .

...