Вопрос

Я хочу реализовать Bootstrap3 вкладки В моем приложении, которое отображает школьные данные по штату. Так что, если вы перейдете на example.com/ma/, вы увидите информацию о штате Массачусетс и вкладках, чтобы сортировать на уровне класса.

Я уже использую Queryset для фильтрации по состоянию, так что на примере. И я могу показать все данные на одной из вкладок, но не могу отфильтровать их для нескольких вкладок. Чтобы сделать это просто, я просто хочу сделать вкладки для «All» и «High School» здесь.

Вот мой модели.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()),

Я не верю, что хочу использовать здесь несколько запросов, но вместо этого найду способ добавить дополнительный фильтр в мой контекст_дата в представлении «Высшая школа», который я могу затем добавить в свой шаблон. Однако мои попытки добавить дополнительные контекстные фильтры не удались. Мысли?

Это было полезно?

Решение

Вы можете просто добавить новый запрос в контекст:

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

    context['schools_highschool'] = context['schools_by_state'].filter(grades='9-12')

    return context

Затем петля schools_highschool в шаблоне. Я думаю, что ваш шаблон тоже немного не так. Может сделать это:

{% 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>


    <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_highschool %}
                    <li>{{ school.school_name }}</li>
                {% endfor %}
            </ul>
        </div>  

    </div><!-- end content -->

</div><!-- end row -->

{% endblock content %}

Другие советы

jproffitts Ответ правильный, но вы также можете фильтровать на основе этого одного запроса, установленного в вашем шаблоне:

<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 -->
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top