我想在我的应用程序中实现Bootstrap3 选项卡,它按州显示学校数据。因此,如果您访问 example.com/ma/,您将看到马萨诸塞州的信息以及按年级排序的选项卡。
我已经在使用查询集按状态过滤,以便在 example.com/ma/ 上只出现“ma”结果。而且我可以在其中一个选项卡中显示所有数据,但不能为多个选项卡过滤掉它。为了简单起见,我只想在这里为“所有”和“高中”做标签。
这是我的models.py:从 django.db 导入模型
class School(models.Model):
school_name = models.CharField(max_length=200)
location_state = models.CharField(max_length=2)
grades = models.CharField(max_length=20)
这是我的state.py模板:
{% extends 'base.html' %}
{% block content %}
<h2>{{ state }}</h2> #This works and shows the state based on the URL
<div class="row">
<div class="col-12 col-sm-12 col-lg-12">
<ul class="nav nav-tabs" id="myTab">
<li class="active"><a href="#all">All</a></li>
<li><a href="#high">High School</a></li>
</ul>
</div>
{% for school in schools_by_state %}
<div id="content" class="tab-content">
<div class="tab-pane active" id="all">
<ul>
<li>{{ school.school_name }}</li>
</ul>
</div>
<div class="tab-pane" id="high">
<ul>
<li>{{ ???highschool??? }}</li>
</ul>
</div>
</div><!-- end content -->
</div><!-- end row -->
{% endfor %}
{% endblock content %}
这是我的views.py:
from django.views.generic import ListView
from .models import School
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)
def get_context_data(self, **kwargs):
context = super(StateListView, self).get_context_data(**kwargs)
context.update({'state': self.kwargs['location_state']})
return context
为了完整起见,这里是这个视图的urls.py :
url(r'^(?P<location_state>[A-Z]{2})/$', StateListView.as_view()),
我不相信我想在这里使用多个查询集,而是找到一种方法在“highschool”视图中为我的 context_data 添加一个额外的过滤器,然后我可以将它添加到我的模板中。但是,我尝试添加额外的上下文过滤器都失败了。想法?