django + Apache + URL

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
KingKong
User
Beiträge: 4
Registriert: Dienstag 5. September 2006, 16:31

Hallo Leute,

da es keinen Django Forum gibt, muss ich meine Frage wohl hier los werden... ist etwas kompliziert, ich hoffe ich kann sie hier erlaeutern:

System:
ich als Neueinsteiger,
Python 2.4
Django 0.95
Apache 2.0.59

Hab auch auch schon n kleines Proggi geschrieben mit Django, klappt mit dem eigenen kleinen Server auch sehr gut, jetzt will ich dat ganze mal in Apache integrieren...
Mod_Python funzt aufm Apache wunderbar, dann habe ich noch wie in der Doku in die apache conf geschrieben:
<Location "/mysite/">
SetHandler python-program
PythonPath "['d:/django'] + sys.path"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE myproject.settings
PythonDebug On
</Location>
in der urls.py im Django Projectordner habe ich dann :
urlpatterns = patterns('myproject.proggi.views',
(r'^proggi/$','index'),
(r'^proggi/(?P<id>\d+)/$','detail'),
(r'^proggi/(?P<id>\d+)/write/$','write'),
(r'^proggi/(?P<id>\d+)/read/$','read'),
(r'^/admin/', include('django.contrib.admin.urls')),
)
Mit dem Python Entwicklungsserver würde ich also http://localhost:8000/proggi aufrufen um zum Proggi zu kommen. Aber im Apache muss ich http://localhost/mysite/ aufrufen um zum Projektordner zukommen, und dann stimmen die URLs fuer die in der urls.py definierten Pattern nicht mehr...

So, ich könnte natürlich meine urls.py so anpassen, dass man im Apache mit http://localhost/mysite/proggi/ zum Proggi zukommen:
urlpatterns = patterns('myproject.proggi.views',
(r'^mysite/proggi/$','index'),
(r'^mysite/proggi/(?P<id>\d+)/$','detail'),
(r'^mysite/proggi/(?P<id>\d+)/write/$','write'),
(r'^mysite/proggi/(?P<id>\d+)/read/$','read'),
(r'^/admin/', include('django.contrib.admin.urls')),
)
aber dann wäre es sehr unflexible, weil ich dann in den Templates z.B bei <Form Action=""> statt /proggi/id/write/ => /mysite/proggi/id/write/ eingeben muss, und sollte sich mysite mal ändern, müsste ich alle Templates mit verändern...

deshalb frage in die Runde:
- gibts globale Variable die ich auch in Templates nutzen kann?
- gibts URL Funktionen die ich in Templates nutzen kann?
- wie kann man das Problem noch lösen?

Ich hoffe das Problem ist verständlich erklärt und dass mir jemand mal mit ner Lösung helfen kann...

Gruss
KingKong
XT@ngel
User
Beiträge: 255
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Nach Dynamische Webinhalte verschoben.
MfG
Andreas
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Man kann beispielsweise dies einsetzen:

Code: Alles auswählen

RewriteEngine On
RewriteRule ^/(.*)$ /mysite/$1 [QSA,L]
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Monk
User
Beiträge: 16
Registriert: Montag 28. August 2006, 11:27

Hallo KingKong

Du findest die benötigten Antworten in http://www.djangoproject.com/documentation/tutorial3/ unter Decoupling the URLconfs.

Wenn Du so vorgehst, musst Du jeweils nur noch eine URL ändern, wenn sich der Pfad Deiner Anwendung ändert.

Gruß, der Monk
CrackPod
User
Beiträge: 205
Registriert: Freitag 30. Juni 2006, 12:56

Is zwar schon tot der Thread, aber falls jemand dasselbe Problem hat, hätt ich einen Vorschlag(außer der is total unsinnig, aber das werdet ihr schon noch sagen ;) )
Man kann doch in der settings.py eine Variable SITE o.ä. definieren, mit dem seitennamen und den kann man ja dann im template benutzen {{ SITE }}, da man SITE ja in view.py importieren kann.
Is vielleicht etwas umständlich ausgedrückt :wink:
LG
Antworten