Frage

Ich möchte implementieren Bootstrap3 -Registerkarten In meiner App, in der Schuldaten nach Staat angezeigt werden. Wenn Sie also zu example.com/ma/ gehen, sehen Sie Informationen für den Zustand von Massachusetts und Registerkarten, um nach Klassenstufe zu sortieren.

Ich benutze den Queryset bereits zum Filtern nach Status, sodass auf example.com/ma/ nur "mA" -Ergebnisse erscheinen. Und ich kann alle Daten in einer der Registerkarten anzeigen, kann sie jedoch nicht für mehrere Registerkarten herausfiltern. Um es einfach zu halten, möchte ich hier nur Tabs für "All" und "High School" machen.

Hier ist mein Models.py: Aus Django.db -Importmodellen

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

Hier ist meine Vorlage für 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 %}

Und hier ist mein Ansichten.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

Für die Vollständigkeit ist hier die urls.py für diese Ansicht:

url(r'^(?P<location_state>[A-Z]{2})/$', StateListView.as_view()),

Ich glaube nicht, dass ich hier mehrere QuerySets verwenden möchte, sondern einen Weg zum Hinzufügen eines zusätzlichen Filters zu meinem context_data in der Ansicht für "Highschool", den ich dann zu meiner Vorlage hinzufügen kann. Meine Versuche, zusätzliche Kontextfilter hinzuzufügen, sind jedoch alle fehlgeschlagen. Gedanken?

War es hilfreich?

Lösung

Sie können einfach einen neuen Queryset zum Kontext hinzufügen:

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

Dann Schleife schools_highschool in der Vorlage. Ich denke, Ihre Vorlage ist auch ein wenig aus. Vielleicht tun Sie das:

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

Andere Tipps

JPROFFITTS -Antwort ist korrekt, aber Sie können auch basierend auf dieser einen Abfrage in Ihrer Vorlage filtern:

<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 -->
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top