Seite 1 von 1
zwei identische views, nur eine liefert Ergebnisse
Verfasst: Donnerstag 28. April 2011, 13:50
von nihilist
Hello again

Ich habe eine Django-App mit folgendem Inhalt
models.py
Code: Alles auswählen
class Dpkg(models.Model):
hostname = models.CharField(max_length=20)
status = models.CharField(max_length=2)
name = models.CharField(max_length=50)
version = models.CharField(max_length=50)
description = models.TextField()
def __unicode__(self):
return self.hostname
urls.py
Code: Alles auswählen
[...]
(r'^host/(?P<host>[a-zA-Z]+)$', 'packages.views.host'),
(r'^package/(?P<package>[a-zA-Z0-9_.-]+)$', 'packages.views.package'),
[...]
views.py
Code: Alles auswählen
def host(request, host):
host_list = Dpkg.objects.filter(hostname=host)
return render_to_response('host/detail.html', { 'host_list ' : host_list})
def package(request, package):
package_list = Dpkg.objects.filter(name=package).order_by('-version')
return render_to_response('packages/detail.html', { 'package_list': package_list})
Rufe ich die URL
http://127.0.0.1:8000/package/xy
auf, wird die Seite mit Inhalt wiedergegeben.
Bei
http://127.0.0.1:8000/host/xy
funktioniert das nicht.
(der Paketname bzw. hostname existiert beidesmal in der DB)
Woran liegt das? Kann ausser der etwas anderen regexp in der urls.py keine Unterschied erkennen.(auch mit identischer regexp kein Erfolg)
Das template-file ist beidesmal identisch, (von s/host/package/g mal abgesehen)
Code: Alles auswählen
{% for host in host_list %}
<li>
{{ host.hostname }} {{ host.version }} {{ host.name }}
</li>
{% endfor %
Gibt es 'ne Möglichkeit eine "verbose" Ausgabe des ganzen zu bekommen?
Re: zwei identische views, nur eine liefert Ergebnisse
Verfasst: Donnerstag 28. April 2011, 19:21
von ms4py
Kannst du "funktioniert nicht" präzisieren...
Re: zwei identische views, nur eine liefert Ergebnisse
Verfasst: Donnerstag 28. April 2011, 19:38
von nihilist
Naja, deswegen auch die Frage ob man die Ausgabe noch ausführlicher bekommen kann.
Im Moment kann ich nur sagen das bei dem ersten Beispiel, wenn ich die Seite aufrufe, zu dem in der url geschriebenen package die passenden Hostnamen und Versionen ausgegeben werden.
Bei dem zweiten Beispiel sollen dann alle packages die auf dem in der url angegeben host installiert sind ausgegeben werden. Die Seite bleibt leer, d.h. meine for-schleife im template liefert keine Ausgabe.
Also gehe ich davon aus das meine
leer ist.
Wenn ich mir eine Liste erstelle und manell alle hostname ausgebe geht das, nur über die url und der übergabe mit
bleibt "host_list" leer
Hoffe ich konnte das jetzt etwas besser erklären

Re: zwei identische views, nur eine liefert Ergebnisse
Verfasst: Donnerstag 28. April 2011, 20:03
von BlackJack
@nihilist: Statt nur davon auszugehen könntest Du es ja mal nachprüfen und ein paar mehr Zwischenergebnisse mit in das Template einfliessen lassen.
Re: zwei identische views, nur eine liefert Ergebnisse
Verfasst: Donnerstag 28. April 2011, 20:18
von nihilist
Danke für deine Antwort, aber ich denke da brauche ich Hilfe, weiß nicht wie ich das anpacken soll.
Wie gesagt besteht das template nur aus der for-schleife.
Ich weiß nicht was du mit Zwischenergebnissen meinst bzw. was ich da sonst noch ausgeben soll ausser den schon darin enthaltenen.
Re: zwei identische views, nur eine liefert Ergebnisse
Verfasst: Donnerstag 28. April 2011, 20:26
von BlackJack
@nihilist: Dann schreib etwas mehr in das Template hinein. Zum Beispiel irgend eine feste Ausgabe ins Template und über den View übergeben an das Template, an der man sehen kann, dass es sich auch tatsächlich um die aktuellen Dateien handelt, also Änderungen in Template und View auch tatsächlich ankommen. Dann die `repr()`-Darstellung von den Argumenten, die in die View-Funktion reingehen, um zu sehen ob die Eingabeargumente überhaupt richtig ankommen. Und wenn Du nur annimmst das `host_list` leer ist, dann lass Dir doch einfach auch davon mal die Länge ausgeben.
Re: zwei identische views, nur eine liefert Ergebnisse
Verfasst: Donnerstag 28. April 2011, 20:55
von SpiritCrusher
Hast du mal mit nem print Statement geschaut, ob überhaupt was in dem Queryset drin ist, dass du da erzeugst? Wenn ich ne Django App debugge, dann print ich einfach alles was interessant ist. Das landet dann im output vom development server...
Re: zwei identische views, nur eine liefert Ergebnisse
Verfasst: Donnerstag 28. April 2011, 21:06
von ms4py
SpiritCrusher hat geschrieben:Hast du mal mit nem print Statement geschaut, ob überhaupt was in dem Queryset drin ist, dass du da erzeugst? Wenn ich ne Django App debugge, dann print ich einfach alles was interessant ist. Das landet dann im output vom development server...
Genau, einfach ein `print host_list` for dem return...
Re: zwei identische views, nur eine liefert Ergebnisse
Verfasst: Freitag 29. April 2011, 07:27
von nihilist
Füge ich ein "print host_list" sowie ein count ein:
Code: Alles auswählen
def host(request, host):
host_list = Dpkg.objects.filter(hostname=host)
print host_list
count = Dpkg.objects.filter(hostname=host).count()
print count
return render_to_response('host/detail.html', { 'host_list ' : host_list})
Und rufe die url
http://127.0.0.1:8000/host/homer danach auf, wobei "homer" der hostname ist erhalte ich das:
Code: Alles auswählen
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
[<Dpkg: homer>, <Dpkg: homer>, <Dpkg: homer>, <Dpkg: homer>, <Dpkg: homer>, <Dpkg: homer>, <Dpkg: homer>, <Dpkg: homer>, <Dpkg: homer>, <Dpkg: homer>, <Dpkg: homer>, <Dpkg: homer>, <Dpkg: homer>, <Dpkg: homer>, <Dpkg: homer>, <Dpkg: homer>, <Dpkg: homer>, <Dpkg: homer>, <Dpkg: homer>, <Dpkg: homer>, '...(remaining elements truncated)...']
533
im output des development servers.
D.h. meine Annahme dass das queryset leer ist war Quark
Edit:
Ich habe den Fehler gefunden:
In
Code: Alles auswählen
return render_to_response('host/detail.html', { 'host_list' : host_list})
war nach host_list ein leerzeichen mit drin.
Code: Alles auswählen
return render_to_response('host/detail.html', { 'host_list ' : host_list})
Klarer Fall von kleiner Ursache, großer Wirkung
Vielen Dank an eure Mithilfe, denke das Überprüfen des querysets mithilfe von print, count usw. wird mir noch bei den kommenden Problem(chen) helfen

Re: zwei identische views, nur eine liefert Ergebnisse
Verfasst: Freitag 29. April 2011, 09:44
von ms4py
nihilist hat geschrieben:
war nach host_list ein leerzeichen mit drin.
Code: Alles auswählen
return render_to_response('host/detail.html', { 'host_list ' : host_list})
Deshalb am besten das dict über die alternative Variante mit Keyword-Arguments erzeugen, dann passiert so etwas nicht:
Code: Alles auswählen
return render_to_response('host/detail.html', dict(host_list=host_list))