在Django turtoring book第3章中,有{%if Latest_question_list%},但我什么也没有

时间:2018-09-26 18:02:02

标签: django

{% if latest_question_list %}

在index.html页面中,我按书中所述添加了代码。但是latest_question_list被显示为无,我没有得到任何类似的显示。有人可以帮我解决这个问题吗?

编辑

index.html

{% if latest_question_list %}
<ul>
{% for question in latest_question_list %}
<li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a> 
</li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}

views.py

from django.http import HttpResponse
from django.template import loader

from .models import Question


def index(request):
  latest_question_list = Question.objects.order_by('-pub_date')[:5]
  template = loader.get_template('polls/index.html')
  context = {
    'latest_question_list': latest_question_list,
    }
  return HttpResponse(template.render(context, request))

models.py

from django.db import models


class Question(models.Model):
  question_text = models.CharField(max_length=200)
  pub_date = models.DateTimeField('date published')

1 个答案:

答案 0 :(得分:1)

  • 签出您的模板路径,也许您正在将数据发送到错误的模板。如Django Tutorial所说:

      

    首先,在民意调查目录中创建一个名为template的目录。 Django将在其中查找模板。

         

    您项目的TEMPLATES设置描述了Django如何加载和呈现模板。默认设置文件配置DjangoTemplates后端,其APP_DIRS选项设置为True。按照惯例,DjangoTemplates在每个INSTALLED_APPS中寻找一个“模板”子目录。

         

    在刚创建的模板目录中,创建另一个名为polls的目录,并在其中创建一个名为index.html的文件。换句话说,您的模板应位于polls / templates / polls / index.html。由于如上所述app_directories模板加载器的工作方式,您可以在Django中将此模板简称为polls / index.html。

  • 您还可以在index视图中打印列表,以确保latest_question_list不为空。

修改

  • 您会发现,模板中使用的context键名必须与在视图中创建的键名相同。