2017-02-28 5 views
0

Ich habe eine Liste der Flugzeuge in browseaircraft.html angezeigt. Der Benutzer klickt auf den Titel und wird auf die Detailseite geleitet, zeigt jedoch nicht die Details dieses bestimmten Posts an, sondern alle Posts? Es gibt keine Fehlermeldung, aber es funktioniert nicht wie erwartetIn der Detailansicht werden keine Details zum Post angezeigt. Django

Modelle

class Aircraft(models.Model): 
    title = models.CharField(max_length=50, default="") 
    cost = models.DecimalField(max_digits=8, decimal_places=3) 
    range = models.IntegerField() 
    cruise_speed = models.IntegerField() 

def get_absolute_url(self): 
    return reverse('aircraftdetail', kwargs={'pk': self.id}) 

Urls

urlpatterns = [ 
url(r'^admin/', admin.site.urls), 
url(r'^aircraft', 'aircraft.views.browseaircraft', name='browseaircraft'), 
url(r'^aircraftdetail/(?P<pk>\d+)/$', 'aircraft.views.aircraftdetail', name='aircraftdetail'),] 

Ansichten

def browseaircraft(request): 
    all_aircraft = Aircraft.objects.all() 
    variables = {'all_aircraft':all_aircraft} 
    return render(request,'browseaircraft.html', variables) 

def aircraftdetail(browseaircraft): 
    model = Aircraft 

def aircraft_detail_view(request,pk): 
    try: 
     aircraft_id=Aircraft.objects.get(pk=pk) 
    except aircraft.DoesNotExist: 
     raise Http404("Book does not exist") 
    return render(request,'aircraft_detail.html', 
     context={'aircraft':aircraft_id,} 
    ) 

Browseaircraft.html

{% if all_aircraft%} 
    {% for a in all_aircraft %} 
     <img src="{{a.image.url}}"height="100" width="100"> 
     <a href="{{ a.get_absolute_url }}"> {{ a.title }}</a> 
     {{ a.range }}, 
     {{ a.body }}, 
    {% endfor %} 

aircraft_detail.html

{% block content %} 
    {% for a in all_aircraft %} 
    <h1>Title: {{ a.title }}</h1> 
    {{ a.cost }} 
    {{ a.range}} 
    {{ a.cost }} 
    {{ a.cruise_speed }} 
    {% endfor %} 
{% endblock %} 
+0

Gibt es einen Grund, warum Sie meine vollkommen richtige Antwort ignoriert, wenn Sie diese identische Frage vor ein paar Tagen gefragt? –

Antwort

0

Nun, Ihre aircraft_detail.html Schleifen über alle Flugzeuge und zeigt deren Informationen. Wenn Sie nur wollen zeigen, Informationen für einen ausgewählten Flugzeugen, müssen Sie die HTML-Seite, um so etwas zu ändern:

{% block content %} 
    <h1>Title: {{ aircraft.title }}</h1> 
    {{ aircraft.cost }} 
    {{ aircraft.range}} 
    {{ aircraft.cost }} 
    {{ aircraft.cruise_speed }} 
{% endblock %} 
1

Zusätzlich zu den Ausgaben von anderen Plakaten darauf hingewiesen, haben Sie ein Problem mit Deine urls.py. Sie beenden das Muster für Ihre Indexansicht nicht, sodass es mit allem übereinstimmt, was mit "aircraft" startet - was "aircraftdetail" enthält. Sie sollten $ konsequent nutzen:

url(r'^admin/', admin.site.urls), 
url(r'^aircraft/$', 'aircraft.views.browseaircraft', name='browseaircraft'), 
url(r'^aircraftdetail/(?P<pk>\d+)/$', 'aircraft.views. aircraft_detail_view', name='aircraftdetail'),] 
+0

Auch die letzte URL sollte den richtigen View-Namen 'aircraft.views.aircraft_detail_view' und nicht' aircraft.views.aircraftdetail' verwenden. – themanatuf

+1

Ja, danke, korrigiert. Es scheint eine Funktion namens "aircraftdetail" zu geben, aber ich verstehe nicht, was es tun soll. –

Verwandte Themen