如何在view.py中过滤查询并将其呈现到模板中?

时间:2016-08-10 02:16:41

标签: python django django-templates django-views

我从基本的角度理解查询。那就是我写的:

{% for item in items %}
    {{ item.jurisdiction}}
{% endfor %}

我的数据库表中的每个行项目都会在“辖区”列中有一个条目捕获该行并返回“管辖区”。

我真正想做的是返回过滤的内容。据我所知,后端是应该进行查询/过滤的地方。对我来说,这意味着在views.py

中创建查询和过滤器

现在,我真正想做的是按多个参数进行过滤。例如,“Jurisdiction”+“Retention_Rule”。

我正在寻找如何在views.py中创建过滤后的查询,然后在index.html(或其他模板)中呈现它的说明。此外,想知道可以在模板页面中使用多种不同类型的查询。

views.py

from django.shortcuts import render
from django.template.response import TemplateResponse
from django.http import Http404

from inventory.models import Item 

# Create your views here.

def index(request):
    items = Item.objects.filter(jurisdiction="Germany") 
    return render(request, 'inventory/index.html', {
        'items': items, 
    })

    test = Item.objects.filter(jurisdiction="China").filter(record_type="Exit Interview")
    return render(request, 'inventory/index.html', {
        'test': test, 
    })

“测试”不会呈现,也不会被调用。但是,我只是在那里帮我思考如何创建可以在模板中访问的不同类型的过滤查询。

models.py

from django.db import models

class Item(models.Model):
    id = models.AutoField(primary_key=True)
    jurisdiction = models.CharField(max_length=200)
    business_function = models.CharField(max_length=200)
    record_category = models.CharField(max_length=200)
    record_type = models.CharField(max_length=200)
    retention_rule = models.DecimalField(decimal_places=1,max_digits=3)
    retention_trigger = models.CharField(max_length=200)
    personal_data = models.BooleanField(default=True)
    privacy_driven = models.BooleanField(default=True)

的index.html

{% for item in items %}

    <div class="row">
        <div class="col-md-12">
            <h1>{{ item.jurisdiction }}</h1>
            <h1>{{ item.record_category }}</h1>
            <h1>{{ item.record_type }}</h1>
            <h1>{{ item.retention_rule }}</h1>
            <h1>{{ item.retention_trigger }}</h1>
            <h1>{{ item.personal_data }}</h1>
            <h1>{{ item.privacy_driven }}</h1>
        </div>
    </div>

{% endfor %}

感谢任何建议。

1 个答案:

答案 0 :(得分:1)

认为view函数只是另一个正常函数。未呈现测试,因为已返回该函数。一旦函数返回任何内容,就不会再执行任何行。

您可以通过在上下文中传递所有查询集,将多个筛选的查询传递给模板。

return render(request, 'inventory/index.html', {'items': items, 'test': test})