Django模板:访问query_set和非query_set结果在同一模板中

时间:2013-11-04 20:20:46

标签: python django django-templates django-queryset

我有一个Django应用程序,其中包含有关学校和州的信息。我希望我的模板显示每个州的学校列表,以及基于URL中的州参数的州名称。因此,如果用户访问example.com/vermont/,他们将会看到一份佛蒙特州学校列表和一个标签,上面写着他们在“佛蒙特州”页面上。我可以获得每个州的学校列表,但我无法弄清楚如何在h1标签中列出州名。

这是我的 models.py

from django.db import models

class School(models.Model):
school_name    = models.CharField(max_length=200)
location_state = models.CharField(max_length=20)

def __unicode__(self):
    return self.school_name

这是我的 views.py

from django.views.generic import ListView

class StateListView(ListView):
    model = School
    template_name = 'state.html'
    context_object_name = 'schools_by_state'

    def get_queryset(self):
        state_list = self.kwargs['location_state']
        return School.objects.filter(location_state=state_list)

这是 state.html 的模板:

{% extends 'base.html' %}

{% block content %}
    <h1>{{school.location_state }}</h1> [THIS IS THE LINE THAT DOES NOT WORK]

    {% for school in schools_by_state %}
    <ul>
        <li>{{ school.school_name }}</li>
    </ul>
    {% endfor %}
{% endblock content %}

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

问题是学校变量从未进入上下文。您只是将schools_by_state设置为上下文。

要添加一些额外的上下文,您需要覆盖get_context_data方法。这样您就可以从url参数添加location_state:

def get_context_data(self, **kwargs):
    context = super(StateListView, self).get_context_data(**kwargs)
    context.update({'state': self.kwargs['location_state']})
    return context

然后,您可以在模板中使用{{ state }}代替{{ school.location_state }}