Seite 1 von 1

django und URLs...

Verfasst: Mittwoch 21. Februar 2007, 18:36
von jens
Ü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?

Verfasst: Mittwoch 21. Februar 2007, 21:40
von apollo13
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^^

Verfasst: Mittwoch 21. Februar 2007, 22:08
von mitsuhiko
EDIT:: Fällt mir gerade ein, das ist ja egal. Bis aufs URL bauchen schaut django da nicht drauf.

Verfasst: Donnerstag 22. Februar 2007, 07:36
von jens
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.

Verfasst: Donnerstag 22. Februar 2007, 13:46
von Y0Gi
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.

Verfasst: Donnerstag 22. Februar 2007, 14:11
von jens
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 ;)

Verfasst: Donnerstag 22. Februar 2007, 16:37
von apollo13
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 %}

Verfasst: Donnerstag 22. Februar 2007, 18:51
von rafael
Versuch vielleicht mal

Code: Alles auswählen

(r'^_install(.*?)/$', 'PyLucid.install.views.index') 
für das Slash Append Problem.

Verfasst: Freitag 23. Februar 2007, 11:28
von jens
@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 :(

Verfasst: Freitag 23. Februar 2007, 15:03
von apollo13
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

Verfasst: Freitag 23. Februar 2007, 15:11
von jens
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...

Verfasst: Samstag 24. Februar 2007, 08:19
von rafael
Hab dazu zwar nix in der Doku gefunden, aber das hier funktioniert:

Code: Alles auswählen

{{ interner_link.get_absolute_url }}

Verfasst: Samstag 24. Februar 2007, 11:39
von Y0Gi
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?