我有一个django应用程序设置主要使用管理界面和我自己的一些视图。一切都在我本地机器上的开发服务器上正常工作。
但是在生产服务器上,使用Apache和mod_wsgi,当我在其中一个视图中发出重定向语句时,它会弄乱URL。而不是去
www.hostname.com/wsgi/django/admin/myapp/myform.html
它转到
www.hostname.com/admin/myapp/myform.html
Apache无法识别管理文件夹下的任何内容,因此出现错误。
所以在我的apache配置中,我有以下内容,因此wsgi / django下的任何内容都会被发送到我的应用程序:
WSGIScriptAlias /wsgi/django /project/production/public/wsgi/django_eclipse/myapp.wsgi
在我有问题的观点中,我有以下内容:
return redirect('/admin/sequencing/load_flowcell?' + params )
如果我将重定向更改为包含'/ wsgi / django'部分,我可以完成这项工作,但这意味着我不能保持我的开发服务器上的那个相同。在Django设置中有没有办法,或http.conf设置这个,以便我的重定向自动包含这部分URL?
答案 0 :(得分:0)
Django可以在撤消时使用sites framework生成正确的网址 - 如果您更改与您的网站相关联的domain
行中的Site
字段(由{{1}指示在你的SITE_ID
)到settings.py
,然后一切都应该正常。
(可能还有一些地方有普通网址,例如http://www.hostname.com/wsgi/admin
或LOGIN_URL
设置,您应该确保包含LOGIN_REDIRECT_URL
部分。)
答案 1 :(得分:0)
好吧,它正在重定向到你告诉它的网址。
这就是为什么你不应该在Django的任何地方硬编码URL。如果您使用了URL反转功能,它将自动添加WSGI前缀 - 它已经知道它,并在您使用{% url %}
标记或{{1时将其考虑在内功能。
在urls.py中为URL指定一个名称,并在调用重定向而不是URL中使用该名称,并且所有这些都应该正常工作。无需更多设置。
答案 2 :(得分:-1)
编辑:REAL FIX
from django.core.urlresolvers import reverse, get_script_prefix
....
#only of you absolutely HAVE to have a hardcoded url
return redirect(get_script_prefix()+'admin/sequencing/load_flowcell?'+params )
#better!
return redirect(reverse('admin:index')+sequencing/load_flowcell?'+params )
CAVEAT: https://docs.djangoproject.com/en/dev/howto/deployment/modpython/#basic-configuration
<Location "/mysite/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonOption django.root /mysite <---- Make sure you have this
PythonDebug On
</Location>