1

学校のデータを州ごとに表示するBootstrap3 タブをアプリに実装したいと考えています。そのため、example.com/ma/ にアクセスすると、マサチューセッツ州の情報と学年ごとに並べ替えるタブが表示されます。

example.com/ma/ に「ma」の結果のみが表示されるように、州でフィルタリングするためにクエリセットを既に使用しています。また、タブの 1 つにすべてのデータを表示できますが、複数のタブを除外することはできません。簡単にするために、ここでは「すべて」と「高校」のタブを作成したいと思います。

ここに私のmodels.pyがあります: django.db import models から

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()),

ここで複数のクエリセットを使用したいとは思いませんが、代わりに、「高校」のビューで context_data に追加のフィルターを追加する方法を見つけて、それをテンプレートに追加できます。ただし、追加のコンテキスト フィルターを追加する試みはすべて失敗しました。考え?

4

2 に答える 2

0

jprofitts の回答は正しいですが、テンプレートに設定された次の 1 つのクエリに基づいてフィルタリングすることもできます。

<div id="content" class="tab-content">
    <div class="tab-pane active" id="all">
    <ul>
        {% for school in schools_by_state %}
        <li>{{ school.school_name }}</li>
        {% endfor %}
    </ul>
    </div>
    <div class="tab-pane" id="high">
    <ul>
        {% for school in schools_by_state %}
         {% if school.grade == "9-12" %}
        <li>{{ school.school_name }}</li>
         {% endif %}
        {% endfor %}
    </ul>
    </div>  
</div><!-- end content -->
于 2013-11-07T22:01:57.340 に答える