Seite 1 von 1

url's argument übergabe

Verfasst: Samstag 19. März 2011, 12:12
von maddin91
Hallo an alle,

ich versuche mit folgenden urls:

Code: Alles auswählen

(r'^(?P<site>\d{15})/$', 'mainapp.views.index'),
(r'^', 'mainapp.views.index'),
an die folgende Funktion Argumente zu übergeben. Dabei soll site='index' sein, wenn kein Argument übergeben wird. Allerdings ist site immer = index, wenn ich das wie folgt im views.py angebe:

Code: Alles auswählen

def index(request, site='index'):
kann mit jemand erklären was ich falsch mache?

MfG
Martin

Re: url's argument übergabe

Verfasst: Samstag 19. März 2011, 12:30
von BlackJack
@maddin91: Wie sieht denn eine URL aus bei der es nicht 'index' sein sollte. Flüchtigkeitsfehler wie nicht genau 15 Ziffern oder den '/' am Ende vergessen, hast Du schon ausgeschlossen?

Und nimm mal die zweite Route raus, dann müsstest Du ja eine Fehlermeldung bekommen, welche Zeichenkette da genau versucht wird zu matchen.

Re: url's argument übergabe

Verfasst: Samstag 19. März 2011, 12:35
von maddin91
ach so müssen das dann genau 15 Ziffern sein? Ich dachte das dürften dann höchstens 15 Ziffern sein :shock: hehe

naja eigentlich soll das so gehen:

wenn ich localhost:8000 eingebe soll eben mainapp.views.index aufgerufen werden. In diesem Fall wird eben das in mainapp.views.index angegebene Argument für site genutzt (also Index). Wenn ich zum Beispiel localhost:8000/loginbereich aufrufe soll dann loginbereich als Argument "site" an mainapp.views.index weitergegeben werden.


Nebenbei ne kleine Frage: weiß jemand wie man einen Loginbereich erstellen kann?
Braucht man dafür Coockies oder wie macht man sowas? Kann leiter kein Tutorial dazu finden :-(

Re: url's argument übergabe

Verfasst: Samstag 19. März 2011, 12:50
von BlackJack
@maddin91: Ja das müssen Ziffern sein ('\d') und genau 15 ('{15}'). Mindestens eine Ziffer und maximal 15 wäre '\d{1,15}'. Und damit würde `http://localhost:8000/loginbereich` aber nicht funktionieren weil das keine Ziffern sind sondern Buchstaben.

Willst Du in der `mainapp.views.index` wirklich *alles* behandeln? Für den Loginbereich würde man eher eine eigene Route setzen, dafür sind die doch da.

Für Login und Benutzer, Benutzergruppen, und Rechte bringt Django schon etwas mit: User authentication in Django. Das benutzt Cookies.

Re: url's argument übergabe

Verfasst: Samstag 19. März 2011, 12:58
von maddin91
Also ich habe jetzt mal die urls wie folgt abgeändert:

Code: Alles auswählen

(r'^(?P<site>)/$', 'mainapp.views.index'),
(r'^', 'mainapp.views.index'),
Leider habe ich immer noch das gleiche Problem. Wenn ich localhost:8000/irgendEinText eingebe, wird irgendEinText nicht als Argument übergeben sondern es wird immer index genommen.


Nein ich hatte vor für den Loginbereich eine eigene app zu machen. Das sind eh noch die ersten Schritte. Das wird eh nochmal alles umgebastelt.^^

Danke für den Tip mit der User authentication. Das hatte ich gesucht und nicht gefunden.

Danke schonmal für die tollen Antworten :) hat mir jetzt schon geholfen :)

Re: url's argument übergabe

Verfasst: Samstag 19. März 2011, 13:11
von BlackJack
@maddin91: Hätte gar nicht gedacht, dass man überhaupt eine leere benannte Grupper wie hier r'^(?P<site>)/$' schreiben kann ohne eine Fehlermeldung zu bekommen. Die Gruppe matcht nur die leere Zeichenkette -- Du musst da schon ein Muster reinschreiben das auch etwas matcht und dann an `site` bindet.

An der Stelle solltest Du eine kleine Pause von Django machen und Dich etwas intensiver mit regulären ausdrücken auseinander setzen.

Re: url's argument übergabe

Verfasst: Samstag 19. März 2011, 13:43
von maddin91
Ok habe mal grob hier http://openbook.galileocomputing.de/pyt ... 15_002.htm zum Thema regular expressions gelesen. So wie ich das verstehe wäre doch dann dies korrekt oder? :

Code: Alles auswählen

(r'(?P<year>\S{1,15})/$', 'mainapp.views.index'),
	(r'^', 'mainapp.views.index'),

Re: url's argument übergabe

Verfasst: Samstag 19. März 2011, 13:45
von Leonidas
Gerade dieses freistehende ^ macht irgendwie gar keinen Sinn… das bedeutet nämlich "ein leerer String am Anfang der Zeile".

Re: url's argument übergabe

Verfasst: Samstag 19. März 2011, 13:48
von /me
maddin91 hat geschrieben:

Code: Alles auswählen

(r'(?P<year>\S{1,15})/$', 'mainapp.views.index'),
Damit fängst du dann ein bis 15 Nicht-Whitespace-Zeichen. In dem Fall ist dann allerdings der Gruppenname year unglücklich oder du verwendest ein Kalendersystem das aus einem sehr anderen Kulturkreis als dem irdischen stammt.

Re: url's argument übergabe

Verfasst: Samstag 19. März 2011, 13:58
von maddin91
Oh jo... sollte eigentlich site sein... hehe... Und nun klappts auch jeahhh danke.... danke euch allen für die super Hilfe! Ich glaub ohne euch hätte ich das nie raus bekommen :D