2011-01-07 10 views
1

Ich habe eine Django App unter http://djangohost/appaddress ausgeführt. Ich möchte, dass das Projekt unter http://differentaddress/app verfügbar ist. Zur Zeit kann ich App an der gewünschten Adresse ausführen, aber {% url %} Templatetags gibt mir falsche Adresse im Formular http://differentaddress/app/appaddress. Auch wenn ich direkt zur Django App Adresse gehe, sind alle {% url %} Links im Formular http://djangohost/app/appadress Wie kann ich das ändern? Ich habe diese Eingänge in Apache conf:Django/Apache Adresse Problem

ProxyPass /app/ http://djangohost/appaddress/ 
ProxyPassReverse /app/ http://djangohost/appaddress/ 
+1

Wie läuft eigentlich Django? mod_python, mod_wsgi? –

Antwort

0

Vielleicht keine richtige Lösung, aber immer noch ein Workaround für das Problem, ohne Apache Einstellungen zu stören. Getestet mit mod_msgi und es funktioniert wie ein Zauber. Hier ist der Link: http://fromzerotocodehero.blogspot.com/2011/01/using-proxypass-with-django-project.html. Im Grunde habe ich eingebaute URL-Funktion überschrieben hier benutzerdefinierte urlc temlpatetag erstellen. Im Code des Tags habe ich eine Zeile hinzugefügt, die das erste Vorkommen eines unerwünschten App-Namens durch ein leeres Zeichen ersetzt.

+1

funktioniert, aber alle URL zu verschiedenen Tags ändern ist mühsam. – marks34

0

Sie möchten also eine Django-Site auf einem Sub-URL-Pfad "mounten"? Ich habe das schon mit Apache und mod_proxy probiert, und es war ein Albtraum, das herauszufinden. Hier ist, was ich habe kommen mit (wahrscheinlich nicht vollständig oder perfekt):

# In your scenario 
FORCE_SCRIPT_NAME = "/app/" 

# End of settings 
_prefix = (FORCE_SCRIPT_NAME or "") 
LOGIN_URL   = _prefix + LOGIN_URL 
LOGIN_REDIRECT_URL = _prefix + LOGIN_REDIRECT_URL 
LOGOUT_URL   = _prefix + LOGOUT_URL 
ADMIN_MEDIA_PREFIX = _prefix + ADMIN_MEDIA_PREFIX 

Offensichtlich ist dies wird vorangestellt „/ app /“ zu den wichtigsten Hardcoded Website-URLs, und es setzt FORCE_SCRIPT_NAME um sicherzustellen, dass {% url something %} führt in eine absolute URL von "/ app/something".

Dies funktionierte für mich mit mod_wsgi für die Django-Website und ProxyPass/ProxyPassReverse für die "Montage". Probieren Sie es aus und geben Sie mir Feedback, ich bin interessiert, ob das eine allgemeine Lösung ist.

+0

FORCE_SCRIPT_NAME sollte niemals für mod_wsgi benötigt werden. Wenn sich der Django auf einem Backend-Apache befand, sollte er einfach unter der gleichen Sub-URL auf dem Backend-Server bereitgestellt werden, wie er über den Front-End-Webserver veröffentlicht wird. Die Anpassungen der Login-URL werden jedoch weiterhin benötigt. –

+0

@Graham: Nun, ich habe es vor einigen Wochen versucht und geriet in Schwierigkeiten. Wie gesagt, ich benutze mod_wsgi (à la 'WSGIScriptAlias ​​/ app/path/to/wsgi.app'). Wenn ich mich richtig erinnere, war das Problem mit Weiterleitungen (z. B. HTTP 302). Ich denke, mit "Backend Apache" meinen Sie einen zweiten Apache, bei dem die Site auf "/" gemountet ist (mit dem ersten Apache-Proxy-Passing zum Backend-Server)? – AndiDog