django und URLs...

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mittwoch 21. Februar 2007, 18:36

Überall in den django Doku steht, bzw. ist als Beispiel so, das Apps immer im url-root laufen.
Doch was ist, wenn man eine "index.fcgi" benutzt? Oder sogar in einem Verzeichniss steckt z.B.: "http://example.com/MyApp/index.fcgi"

Unter http://www.djangoproject.com/documentat ... ith-apache steht, das man in dem Falle Modrewrite nutzten sollte. Doch was ist, wenn das nicht zur Verfügung steht?

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Mittwoch 21. Februar 2007, 21:40

Test es einfach mal aus, ich habe diese Problem nicht, verwende allerdings auch fcgi (und proxie per appache auf lighthttp->fcgi ;) )
Warum du allerdings in einem appVerzeichnis eine index.fcgi haben solltest weiß ich nicht!

MfG apollo13

P.S.: Einen Anbieter der mir kein ModRewrite zur Verfügung nehme ich nicht^^
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Mittwoch 21. Februar 2007, 22:08

EDIT:: Fällt mir gerade ein, das ist ja egal. Bis aufs URL bauchen schaut django da nicht drauf.
TUFKAB – the user formerly known as blackbird
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 22. Februar 2007, 07:36

bauchen?
Meinst du bauen? Das ist denke ich das Problem. In allen Beispielen geht man einfach hin und baut die URL mit führenden Slash zusammen.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Donnerstag 22. Februar 2007, 13:46

WSGI-Anwendungen kann man über SCRIPT_NAME und PATH_INFO über URL-Mapper wunderbar zusammenstöpseln. Auch das exzellente Routes bietet die Möglichkeit, eine Applikation in (virtuellen) Unterverzeichnissen zu verwenden und spuckt über routes.util.url_for() entsprechend erweiterte URLs aus.

Wenn in deinem Pfad dein Dispatcher-Script für FastCGI auftaucht, sieht das natürlich anders aus. Aber wie apollo13 schon andeutete: mod_rewrite oder äquivalentes ist ein Muss! Das braucht man heutzutage einfach um saubere Apps zu bauen. Besorg dir endlich ein gescheites Hosting-Environment! Das Geld ist es mehr als Wert. Python-Web-Apps sind nun mal kein Frickel-PHP, das man irgendwo auf'n Webspace schmeißt und überall läuft.
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 22. Februar 2007, 14:11

Y0Gi hat geschrieben:Python-Web-Apps sind nun mal kein Frickel-PHP, das man irgendwo auf'n Webspace schmeißt und überall läuft.
Das ist jetzt aber IMHO ein Schuss der nach hinten losgeht...
Es hat nichts mit frickel zu tun... OK PHP ist frickel-Kram... Aber wäre es nicht schön, wenn Python-Web-Apps so flexibel sind, das man sie überall hinschmeißen kann und es läuft???

Die gute Nachricht ist allerdings, es geht, so halb!

Also ich hab mal ein Test gemacht. Eine django App liegt in http://localhost/django_test/index.py
Dabei nutzte ich das als CGI (siehe: http://code.djangoproject.com/ticket/2407 )

Nun habe ich u.a. folgenden view: (r'^_install/(.*?)$', 'PyLucid.install.views.index')

Wenn ich nun http://localhost/django_test/index.py/_install/ aufrufe geht es.

Der AddSlash Automatismus geht allerdings nicht. Also wenn ich nur http://localhost/django_test/index.py/_install benutzte (ohne Abschliessenden Slash) dann werde ich falsch redirectet nach: http://localhost/_install/

Das ist aber wohl das Problem, das überall zum root hin verlinkt wird. Wobei das natürlich sehr einfach ist, um URLs zusammen zu bauen. Um das im alten PyLucid zu umgeben, hatte ich extra eine Hilfsklasse gemacht, die für die URL Generierung zuständig war. Dabei was es egal wo PyLucid lag, ob mit index-Datei oder ganz ohne.

Ich würde jetzt doch gern wissen, ob mod-rewrite wirklich pflicht ist und es ohne einfach nicht geht, oder ob man doch irgendwie drum rum kommt. Ansonsten müsste ich mal prüfen ob GPcom rewrite hat oder installieren kann...

EDIT: Ha! Ich brauche mir keine sorgen zu machen. GPcom bietet mod_rewrite an ;)

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Donnerstag 22. Februar 2007, 16:37

Such mal in den Googlegroups danach (dort steht wo ein Beitrag wie das geht), ich finde ihn leider gerade nicht.

MfG apollo13

P.S.: Gerade in der neuen dev-Version sind ein paar urlfeatures drin, du brauchst im Template zum Beispiel nicht mehr die Url wissen da sowas in die Richtung funzt:

Code: Alles auswählen

{% url myviews.view arg1,arg2 %}
rafael
User
Beiträge: 189
Registriert: Mittwoch 26. Juli 2006, 16:13

Donnerstag 22. Februar 2007, 18:51

Versuch vielleicht mal

Code: Alles auswählen

(r'^_install(.*?)/$', 'PyLucid.install.views.index') 
für das Slash Append Problem.
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 23. Februar 2007, 11:28

@rafael: Das hilft nichts. Wenn ich ohne Abschließenden Slash die URL aufrufe, kommt wie Umleitung (Status: 301 MOVED PERMANENTLY)
apollo13 hat geschrieben:P.S.: Gerade in der neuen dev-Version sind ein paar urlfeatures drin, du brauchst im Template zum Beispiel nicht mehr die Url wissen da sowas in die Richtung funzt:

Code: Alles auswählen

{% url myviews.view arg1,arg2 %}
Du meinst das hier: http://www.djangoproject.com/documentat ... lates/#url

Irgendwie geht das nicht wirklich...

Also ich hab in der URL ja u.a. das: (r'^_install/(.*?)$', 'PyLucid.install.views.index')

Nun packe ich mal in ein Template das: {% url PyLucid.install.views.index %}
Das Ergebnis des Tags ist leer, also nichts.

Füge ich z.B. einen Punkt ein, also so: {% url PyLucid.install.views.index . %}
kommt das raus: /_install/

Dabei ist es unabhängig davon, wie die Aufzurufende Adresse ist. Also ob es z.B. http://localhost/django_test/index.py/_install/ oder einfach nur http://localhost/_install/ ist.
Kurz um, das bringt irgendwie garnichts :(

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Freitag 23. Februar 2007, 15:03

sorry, ich weiß, dass es dir nichts bringt, ich wollte damit nur zeigen, dass das url-handling gerade verbessert, erweitert etc... wird.

Durch diesen Tag sind die urls nun ja nicht mehr statisch in den Templates drin, und ich denke jetzt kommt bald die Möglichkeit django in Unterverzeichnisen laufen zu lassen.

MfG apollo13
Benutzeravatar
jens
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 23. Februar 2007, 15:11

Also irgendwie bin ich noch ganz verwirrt, wie man URLs zusammen bauen kann...
Gibt es einen Weg, die Absolute URL Inkl. Domain in einem Template zu benutzten?

Mir würde da nur einfallen os.environ["wsgi.url_scheme"] und os.environ["HTTP_HOST"] in den Context zu packen und dann die URL zusammen zu bauen. Aber das muß doch auch einfacher gehen.

Sinnvoll ist das ganze z.B. wenn man einen Absoluten Link auf django.contrib.admin.urls setzten möchte. Oder zum Zentralen Index der Seite...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
rafael
User
Beiträge: 189
Registriert: Mittwoch 26. Juli 2006, 16:13

Samstag 24. Februar 2007, 08:19

Hab dazu zwar nix in der Doku gefunden, aber das hier funktioniert:

Code: Alles auswählen

{{ interner_link.get_absolute_url }}
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Samstag 24. Februar 2007, 11:39

jens hat geschrieben:Mir würde da nur einfallen os.environ["wsgi.url_scheme"] und os.environ["HTTP_HOST"] in den Context zu packen und dann die URL zusammen zu bauen. Aber das muß doch auch einfacher gehen.
Routes macht das auch. Kann Django das nicht?
Antworten