url's argument übergabe

Django, Flask, Bottle, WSGI, CGI…
Antworten
maddin91
User
Beiträge: 5
Registriert: Samstag 19. März 2011, 11:58

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
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.
maddin91
User
Beiträge: 5
Registriert: Samstag 19. März 2011, 11:58

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 :-(
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.
maddin91
User
Beiträge: 5
Registriert: Samstag 19. März 2011, 11:58

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 :)
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.
maddin91
User
Beiträge: 5
Registriert: Samstag 19. März 2011, 11:58

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'),
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Gerade dieses freistehende ^ macht irgendwie gar keinen Sinn… das bedeutet nämlich "ein leerer String am Anfang der Zeile".
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
maddin91
User
Beiträge: 5
Registriert: Samstag 19. März 2011, 11:58

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
Antworten