Django已经在我的mod_wsgi实现Apache(在Windows 7 x64,btw上)上运行了一段时间。这是一个巨大的痛苦,必须实际手动修改注册表值以正确安装,并让Django使用与我所有其他应用程序相同的MySQL安装。我还必须通过双重转义括号(Program Files(x86))来修改PATH变量,因为它们正在使用批处理文件。但这主要是微软的错,我在漫无边际。
这是我的问题: URLCONF和视图中使用的所有URL都能正常工作。当我尝试关闭站点根URL时,唯一没有的就是模板。我正在运行一个开发服务器,我有两个Django站点,这个站点运行www.example.com/testing。
在模板中,如果我只是将“/”放在< a>,然后它将指向www.example.com/,而不是www.example.com/testing/。我已经阅读了一个关于此的主题,但问题没有解决,因为海报很顽固。我在下面的httpd.conf中发布我的WSGI配置:
Listen 127.0.0.1:8001 VirtualHost *:8001 > ServerName ****.net/testing ServerAdmin *******@gmail.com ErrorLog ********.log WSGIScriptAlias /testing ****/htdocs/testing/apache/django.wsgi Directory ****/htdocs/testing/apache > Order deny,allow Allow from all /Directory> Location "/media"> SetHandler None /Location> /VirtualHost>
注意:所有“<”省略,所以标签会显示
以上是目录中的文件django.wsgi:
import sys import os sys.path.insert(0, '*****/Django/') sys.path.insert(0, '*****/htdocs/') sys.path.insert(0, '*****/htdocs/testing') sys.path.insert(0, '*****/htdocs/testing/apache') os.environ['DJANGO_SETTINGS_MODULE'] = 'testing.settings' import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler() import testing.monitor testing.monitor.start(interval=1.0)
我有一个Nginx前端,它将任何非静态文件从testing /传递到:8001,以便Apache捕获这个虚拟主机。
如果我从django.wsgi文件中省略了根“htdocs /”行,我在网站上只收到500个错误。此外,如果我使用相对于当前URL的URL表单(即“example /”而不是“/ example /”),那么工作正常。但是,如果我添加初始的“/”以将URL放在根目录下,它将使其脱离“www.example.com”而不是像我想要的那样“www.example.com/testing”。
很抱歉很长的帖子,但我希望尽可能清楚。谢谢你的时间。
答案 0 :(得分:2)
这就是为什么你不应该在你的模板中硬编码URL。当然/
会将您带到网站的根目录,而不是应用程序的根目录 - 这就是它应该做的事情。
相反,请在您的urlconf中为您的根视图命名:
urlpatterns = patterns('',
url('^$', 'myapp.views.index', name='home')
)
现在,您可以在模板中执行以下操作:
<a href="{% url home %}">Home</a>
这将正确解析为/testing/
。