2016-08-05 24 views
0

Ich habe eine Klasse namens Features in meinem models.py. In meinem HTML zeige ich eine Liste auf der rechten Seite an, die zwei dieser Features ausschließt, eines ist das aktive Feature, das ausgewählt wurde, das andere ist das zuletzt hinzugefügte, da sie der Hauptinhalt meiner Seite sind. Die verbleibenden Funktionen in der Liste werden nach Datum angezeigt und zeigen, was ich erwarte. Jetzt möchte ich die ersten, zweiten und dritten Features (nur Titel) in der THAT-Liste herausfiltern, damit ich sie in ihren eigenen separaten divs platzieren kann - weil jeder einen einzigartigen CSS-Stil hat. Es gibt wahrscheinlich zahlreiche Möglichkeiten, dies zu tun, aber ich kann keine von ihnen herausfinden.Wie man ein bestimmtes Objekt mit Django-Vorlagen anvisiert

This is a link mein Projekt eine bessere Vorstellung davon zu geben, was ich will (im Grunde versucht, den Inhalt in den farbigen Kästchen auf der rechten Seite zu erhalten.)

Ich lerne gerade Django (und Python wirklich), so Danke für deine Geduld und Hilfe!

HTML

 {% for f in past_features %} 
      {% if f.title != selected_feature.title %} 
      {% if f.title != latest_feature.title %} 
       <h1>{{ f.title }}</h1> 
      {% endif %} 
      {% endif %} 
     {% endfor %} 

ANSICHTEN

def feature_detail(request, pk): 
    selected_feature = get_object_or_404(Feature, pk=pk) 
    latest_feature = Feature.objects.order_by('-id')[0] 
    past_features = Feature.objects.order_by('-pub_date') 
    test = Feature.objects.last() 
    context = {'selected_feature': selected_feature, 
       'latest_feature': latest_feature, 
       'past_features': past_features, 
       'test': test} 
    return render(request, 'gp/feature_detail.html', context) 

MODELS

class Feature(models.Model): 
    title = models.CharField(db_index=True, max_length=100, default='') 
    content = models.TextField(default='') 
    pub_date = models.DateTimeField(db_index=True, default=datetime.now, blank=True) 
    def __str__(self): 
     return self.title 
    def __iter__(self): 
     return [ 
      self.id, 
      self.title ] 

Antwort

0

können Sie entweder speichern die ersten drei Funktionen in separaten Variablen in Ihrem Kontext oder fügen Sie prüft die Vorlage Schleife wie {% if forloop.first %} oder {% if forloop.counter == 2 %}.

+0

Vielen Dank. Das war, was ich suchte! – David

0

Wenn alles, was Sie wollen, ist nicht die aus dem past_features queryset

selected_feature 
    latest_feature 

diese beiden Datensätze haben, dann können Sie exclude auf der past_features Abfrage verwenden und die IDs der selected_features und latest_feature Objekte übergeben.

Die views.py würde wie folgt aussehen:

def feature_detail(request, pk): 
    selected_feature = get_object_or_404(Feature, pk=pk) 
    latest_feature = Feature.objects.order_by('-id')[0] 
    # Collect all the id's present in the latest_feature 

    excluded_ids = [record.pk for record in latest_feature] 
    excluded_ids.append(selected_feature.pk) 

    #This would only return the objects excluding the id present in the list 
    past_features = Feature.objects.order_by('-pub_date').exclude(id__in=excluded_ids) 
    test = Feature.objects.last() 
    context = {'selected_feature': selected_feature, 
       'latest_feature': latest_feature, 
       'past_features': past_features, 
       'test': test} 
return render(request, 'gp/feature_detail.html', context) 

Django ORM einen reichen und gut dokumentiert liefert, die für weitere Informationen Queryset Optionen durchlaufen.

+0

Danke kt14. Dies war auch sehr hilfreich. Ich schätze es. – David