django + Apache + URL

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

django + Apache + URL

Beitragvon KingKong » Donnerstag 7. September 2006, 19:20

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: 256
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Beitragvon XT@ngel » Donnerstag 7. September 2006, 21:00

Nach Dynamische Webinhalte verschoben.
MfG
Andreas
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Freitag 8. September 2006, 08:56

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

Beitragvon Monk » Sonntag 10. September 2006, 20:00

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

Beitragvon CrackPod » Donnerstag 19. April 2007, 16:28

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder