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:

Donnerstag 21. Februar 2008, 19:33

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
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 22. Februar 2008, 19:17

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 22. Februar 2008, 20:07

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 Modvoice
Benutzeravatar
klaus
User
Beiträge: 88
Registriert: Samstag 23. Juni 2007, 09:33
Wohnort: Kaufbeuren
Kontaktdaten:

Samstag 23. Februar 2008, 13:42

@ 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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 23. Februar 2008, 13:59

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 Modvoice
Benutzeravatar
klaus
User
Beiträge: 88
Registriert: Samstag 23. Juni 2007, 09:33
Wohnort: Kaufbeuren
Kontaktdaten:

Samstag 23. Februar 2008, 14:20

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 23. Februar 2008, 14:48

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 Modvoice
Benutzeravatar
klaus
User
Beiträge: 88
Registriert: Samstag 23. Juni 2007, 09:33
Wohnort: Kaufbeuren
Kontaktdaten:

Samstag 23. Februar 2008, 16:34

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 23. Februar 2008, 17:36

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

Sonntag 24. Februar 2008, 20:27

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

Montag 25. Februar 2008, 08:30

Code: Alles auswählen

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

Montag 25. Februar 2008, 08:47

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

CMS in Python: http://www.pylucid.org
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:

Montag 25. Februar 2008, 17:11

ä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
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 25. Februar 2008, 17:12

Doch, die print Ausgaben siehst du im Terminal.

CMS in Python: http://www.pylucid.org
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:

Montag 25. Februar 2008, 17:13

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
Antworten