如何将数据库查询集对象从基于类的视图传递到Django 2.0中的模板

时间:2018-02-07 19:37:24

标签: python django django-queryset

我正在构建一个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>

3 个答案:

答案 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>