Mal wieder Probleme mit Django

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Benutzeravatar
klaus
User
Beiträge: 88
Registriert: Samstag 23. Juni 2007, 09:33
Wohnort: Kaufbeuren
Kontaktdaten:

Ich habe momentan wieder ein kleines Problem mit Django, bzw. eine Stelle, an der ich nicht weiterkomme. Wahrscheinlich ist es blos irgendein newbie-Fehler, den ich nur nicht sehe und ich hoffe, dass ihr mir deshalb helfen könnt.
Ich versuche auf einer Seite Ergebnisse einer Datenbanksuche darzustellen. Fürs erste würde es mir allerdings schon reichen, wenn ich es schaffen würde, alle Einträge anzuzeigen. Also, hier mal der Code, der dieses kühne Unternehmen :wink: bezwecken soll:

Die aufgerufene view-Funktion sieht folgendermaßen aus:

Code: Alles auswählen

from django.shortcuts import render_to_response
from ency.models import Trick

def all(request):
    jt_list = Trick.objects.all()
    return render_to_response('ency/search.htm', locals())

## ...
Das Template sieht folgendermaßen aus:

Code: Alles auswählen

{% extends "../juggl.htm" %}

{% block content %}
<h1>Suchergebnisse</h1>

<table>
<tr>
<td>Name:</td>
<td>Siteswap:</td>
<td>Level:</td>
<td>Requisiten:</td>
<td>Kategorie:</td>
</tr>
{% for jt in jt_list %}
<tr>
<td>{{ jt.name }}</td>
<td>{{ jt.swap }}</td>
<td>{{ jt.level }}</td>
<td>{{ jt.props }}</td>
<td>{{ jt.categ }}</td>
</tr>
{% endfor %}
</table>
{% endblock content %}
Als Fehlermeldung erhalte ich:
TypeError at /juggl/tricks/all/
'tuple' object is not callable

Ich hoffe, dass sich der Fehler in diesem Code befindet, wenn er fehlerfrei sein sollte, dann poste ich noch weitere wichtige Codestücke rein. Ich hoffe, dass ihr mir helfen könnt.
http://klausweidinger.kl.funpic.de
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

ich würde nicht locales nehmen, sondern ein echtes context dict aufbauen... Poste mal den richtigen Traceback!

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du hast irgendwo die Built-in Funktion ``locals()`` mit einem Tupel überschrieben. Nun rate wo der Fehler ist ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
klaus
User
Beiträge: 88
Registriert: Samstag 23. Juni 2007, 09:33
Wohnort: Kaufbeuren
Kontaktdaten:

@ Leonidas: Ich verstehe nicht ganz, was du meinst. Eine Funktion kann man doch nur überschreiben, indem man mit "def" eine neue Funktion definiert, die den gleichen Namen hat, aber doch nicht mit einem Tupel. Ich kann mich natürlich auch Täuschen, so gut kenne ich mich mit Python dann doch nicht aus, aber es würde mich sehr stark wundern.

Ich probiere dann mal den Weg, ein context dict zu fabrizieren, und hoffe, dass der klappt. Wenn nicht, melde ich mich noch mal und poste dann gleich den kompletten Traceback mit.
http://klausweidinger.kl.funpic.de
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

klaus hat geschrieben:@ Leonidas: Ich verstehe nicht ganz, was du meinst. Eine Funktion kann man doch nur überschreiben, indem man mit "def" eine neue Funktion definiert, die den gleichen Namen hat, aber doch nicht mit einem Tupel. Ich kann mich natürlich auch Täuschen, so gut kenne ich mich mit Python dann doch nicht aus, aber es würde mich sehr stark wundern.
Funktionen und "Variablen" sind im gleichen Namensraum und eigentlich auch das selbe (eine "Variable" ist ein Name der an ein Objekt gebunden ist, eine Funktion ist ein Name der an ein Funktionsobjekt gebunden ist, also eigentlich nur ein Sonderfall der "Variable"). Somit ist es absolut logisch. In einigen Lisp-Dialekten (ich glaube Common Lisp) ist das AFAIR anders, so dass Funktionen dort eigene Namensräume haben.

Alternativ kannst du, statt es mir nicht zu glauben, auch einfach ausprobieren.

Code: Alles auswählen

print locals()
def d():
    locals = (1, 2)
    locals()
d()
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
klaus
User
Beiträge: 88
Registriert: Samstag 23. Juni 2007, 09:33
Wohnort: Kaufbeuren
Kontaktdaten:

OK, wenn ich das in der Konsole eingebe erhalte ich ebenfalls einen TypeError. Allerdings weiß ich nicht, wo ich die Funktion locals() überschrieben haben soll. Ich habe in meinem kompletten Projekt keine Funktion, die locals irgendeinen Wert zuweist.
http://klausweidinger.kl.funpic.de
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dann mach mal in ``all()`` vor dem ``locals()`` ein ``print locals``, vielleicht wirds dann klarer was das ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
klaus
User
Beiträge: 88
Registriert: Samstag 23. Juni 2007, 09:33
Wohnort: Kaufbeuren
Kontaktdaten:

Egal, ob ich ein "print locals" einfüge, oder nicht, solange ich die Funktion direkt in PyScripter aufrufe erhalte ich immer nur "True" als Ausgabe.
http://klausweidinger.kl.funpic.de
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Django in einer IDE ausführen? Schlechte Idee.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
klaus
User
Beiträge: 88
Registriert: Samstag 23. Juni 2007, 09:33
Wohnort: Kaufbeuren
Kontaktdaten:

Wie soll ich es denn sonst ausführen? Nur über die Konsole, oder gibt es noch ne andere Lösung, bzw. wenn es schlecht ist, wenn ich es in einer IDE ausführe, wozu gibt es die dann.
http://klausweidinger.kl.funpic.de
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Code: Alles auswählen

python manage.py runserver
So mach ich das immer ;)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Oder man baut sich einen kleine mini test app:
http://www.python-forum.de/topic-10600.html

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
klaus
User
Beiträge: 88
Registriert: Samstag 23. Juni 2007, 09:33
Wohnort: Kaufbeuren
Kontaktdaten:

ähm, aber wenn ich es mit "python manage.py runserver" ausführe (wie ich das normalerweise auch mache, wenn ich die Seite testen will), dann sehe ich doch die "print"-Anweisungen nicht und um die ging es doch.
http://klausweidinger.kl.funpic.de
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Doch, die print Ausgaben siehst du im Terminal.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
klaus
User
Beiträge: 88
Registriert: Samstag 23. Juni 2007, 09:33
Wohnort: Kaufbeuren
Kontaktdaten:

Du meinst mit Terminal schon die Eingabeaufforderung, oder?
Zuletzt geändert von klaus am Montag 25. Februar 2008, 17:17, insgesamt 2-mal geändert.
http://klausweidinger.kl.funpic.de
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

jup

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
klaus
User
Beiträge: 88
Registriert: Samstag 23. Juni 2007, 09:33
Wohnort: Kaufbeuren
Kontaktdaten:

Also bei mir steht in der Eingabeaufforderung folgendes:

Code: Alles auswählen

Django version 0.96.1, using settings 'proto.settings' 
Development server is running at http://127.0.0.1:8000/ 
Quit the server with CTRL-BREAK. 
[25/Feb/2008 17:06:59] "GET /juggl/tricks/all/ HTTP/1.1" 500 47477 
aber weit und breit keine Ausgabe von irgendwelchen print-Anweisungen.
http://klausweidinger.kl.funpic.de
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Also die sollten eigentlich dazwischen dann auftauchen, wenn du den passenden view aufrufst...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
klaus
User
Beiträge: 88
Registriert: Samstag 23. Juni 2007, 09:33
Wohnort: Kaufbeuren
Kontaktdaten:

Naja, du siehst ja die Zeile, in der GET steht, die sollte eig. genau die view-Funktion aufrufen, in der die print-Anweisung steht. Aber sonst steht da bei mir nichts in der Konsole.
http://klausweidinger.kl.funpic.de
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

klaus hat geschrieben:

Code: Alles auswählen

Django version 0.96.1, using settings 'proto.settings' 
 
0.96.1 ist doch eine veraltete Version. Es wird überall empfohlen 0.97 zu verwenden.

Soweit ich gelesen hab soll es nach der 0.96 erhebliche gemacht worden sein.

Kann sein das die Dokus schon auf 0,97 aktualisiert sind. Ich hab auch 0.96 gehabt und hab mich gewundert warum die Beispiele aus dem openbook von Galileocomputing nicht richtig funktioniert haben
Antworten