2016-12-10 3 views
0

Ich möchte die gleiche Vorlage verwenden, um Informationen zu jedem meiner Datenbankobjekte anzuzeigen. Ich möchte in der Lage sein, auf jedes Element in der Liste zu klicken und es mit einer Seite mit Informationen darüber verlinken zu lassen. Ich denke, es gibt einen einfacheren Weg, als für jedes einzelne Objekt eine Ansicht zu machen.Django: Übergeben von Objekt aus Vorlage zu Ansichten

ich alle meine Datenbankobjekte auf meinem list.html wie Eintrag:

{% for instance in object_info %} 
    <li><a href="object">{{ instance.name }}</a></li> 
{% endfor %} 

Mein views.py hat diese Ansicht:

def object_view(request): 
    data = Object.objects.filter(name="") 
    context={ 
    'object_info':data 
    } 
    return render(request, "object.html", context) 

Kann ich jeden {{ instance.name }} zum Pass sehen und verwenden Sie das als eine Variable für meinen Filter?

Antwort

2

Okay, zunächst einmal das nie tun:

data = Object.objects.filter(name="") 

Django hat eine all() Funktion, die alle Objekte zurück:

data = Object.objects.all() 

Zweitens habe ich object_view hoffen, data, object_info, object.html sind nicht Ihre tatsächliche Variablennamen! Wenn ja, stellen Sie bitte sicher, dass sie für Ihre Anwendung sinnvoll sind.

Okay zurück zu deinem Problem. Nun, Sie müssen nicht für jedes einzelne Objekt eine Ansicht machen. Ich gehe davon aus, dass <a href="object">...</a> auf eine neue Seite verweisen sollte, die mit dem ausgewählten Objekt gefüllt wird.

Wenn ja, möchten Sie URLs in den <a> Tags wie folgt haben: /objects/object_id/.

Diese neue URL muss in urls.py wie folgt definiert werden:

urlpatterns += [ 
    url(r'^objects/(?P<oid>[0-9]+)/$', views.object_specific_view, name='objects'), 
] 

Hinweis das oid url Argument. Wir werden es verwenden, um auf unser spezifisches Objekt zuzugreifen.

Jetzt ist Ihre ursprüngliche Vorlage, list.html, sollte wie folgt aussehen:

{% for instance in object_info %} 
     <li><a href="{% url 'objects' oid = instance.id %}">instance.name</a></li> 
    {% endfor %} 

Wo wir instance.id-oid url Argument liefern so etwas wie objects/1/ oder objects/2/ usw.

Nun zu produzieren, bedeutet dies, dass Sie Sie müssen nur eine weitere Ansicht mit einer anderen Vorlage erstellen.

Ihre zweite Ansicht object_specific_view:

def object_specific_view(request, oid): # The url argument oid is automatically supplied by Django as we defined it carefully in our urls.py 
    object = Object.objects.filter(id=oid).first() 
    context={ 
     'object':object 
    } 
    return render(request, "specific_object.html", context) 

Jetzt müssen Sie nur Ihre specific_object.html entwerfen und die object Instanz zugreifen Details eines bestimmten Objekts zeigen :).

+0

Es macht was ich will jetzt, danke! – tchane

Verwandte Themen