我正在构建一个Web应用程序。我正在尝试将一个查询集从基于类的视图传递给模板作为Django 2.0中的变量。但变量没有显示在http://localhost:8000/joblist/。其他文本显示在此URL路由中,但查询集对象不会在页面上显示为变量。 models.py和数据库工作正常,数据库填充了~10k记录。我错过了什么?我还想用简单的词语来了解基于类的视图对基于函数的视图的优点。谢谢。
我的views.py
:
from django.http import HttpResponse
from django.template.response import TemplateResponse
from django.views.generic import ListView,DetailView
from joblist.models import Jobs
def index(request):
context = {}
html = TemplateResponse(request,'welcome.html',context)
return HttpResponse(html.render())
class JobList(ListView):
model=Job
context_object_name = 'job_title'
queryset=Job.objects.all()
template_name = 'job_list.html'
class JobDetail(DetailView):
model = Job
context_object_name = 'job_detail'
queryset = Job.objects.all()
template_name = 'job_detail.html'
我的模板:joblist.html
{% extends 'welcome.html' %}
<h1> Job Title </h1>
<ul>
{% for job in object_list %}
<li>{{ job_title }}</li>
{% endfor %}
</ul>
答案 0 :(得分:3)
您已将context_object_name设置为“job_title”,因此您应该在模板中使用,而不是默认的“object_list”。 job_list似乎是一个更明智的名字。
<ul>
{% for job in job_title %}
<li>{{ job }}</li>
{% endfor %}
</ul>
答案 1 :(得分:1)
您可以尝试使用此代码来迭代list中的context_object_name。谢谢
<ul>
{% for job in job_title %}
<li>{{ job.model_field_name }}</li>
{% endfor %}
</ul>
答案 2 :(得分:0)
你必须修改你的代码如下:
<ul>
{% for job in job_title %}
<li>{{ job.model_field_name }}</li>
{% endfor %}
</ul>