我在http://djangohost/appaddress
上运行了一个django应用。我想在http://differentaddress/app
提供该项目。目前,我可以在所需地址运行应用,但使用{% url %}
templatetags会以http://differentaddress/app/appaddress
格式向我提供不正确的地址。此外,当我直接访问django应用地址时,所有{% url %}
链接的格式均为http://djangohost/app/appadress
如何更改此设置?我在apache conf中有这些入口:
ProxyPass /app/ http://djangohost/appaddress/
ProxyPassReverse /app/ http://djangohost/appaddress/
答案 0 :(得分:1)
你可能不得不通过操纵SCRIPT_NAME来告诉Django它在哪里运行
http://docs.djangoproject.com/en/dev/ref/settings/?from=olddocs#force-script-name
或者,如果你想把东西保存在Apache中,你可以尝试mod_proxy_html - 免责声明:我自己没有使用它,但它确实声称重写HTML页面中的链接
答案 1 :(得分:0)
所以你想在子URL路径上“挂载”一个Django站点?我已经尝试过使用Apache和mod_proxy,这对我来说是个噩梦。这是我提出的(可能不完整或完美):
# 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
显然,这会将“/ app /”添加到最重要的硬编码网站网址,并设置FORCE_SCRIPT_NAME
以确保{% url something %}
会产生“/ app / something”的绝对网址,例如。
这对我使用mod_wsgi用于Django站点和ProxyPass / ProxyPassReverse用于“挂载”。尝试一下并给我反馈,我很感兴趣这是否是一般解决方案。
答案 2 :(得分:0)
可能不是一个合适的解决方案,但仍然可以解决问题,而不会干扰apache的设置。使用mod_msgi进行测试,它就像一个魅力。这是链接: http://fromzerotocodehero.blogspot.com/2011/01/using-proxypass-with-django-project.html。基本上我在这里重写了内置的url函数,创建了自定义urlc temlpatetag。在标签的代码中,我添加了行替换第一次出现不需要的应用名称和空符号。