Django在域根目录下的目录中设置了WSGI:模板中的Url问题

时间:2011-03-15 08:09:15

标签: django url wsgi root

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”。

很抱歉很长的帖子,但我希望尽可能清楚。谢谢你的时间。

1 个答案:

答案 0 :(得分:2)

这就是为什么你不应该在你的模板中硬编码URL。当然/会将您带到网站的根目录,而不是应用程序的根目录 - 这就是它应该做的事情。

相反,请在您的urlconf中为您的根视图命名:

urlpatterns = patterns('',
    url('^$', 'myapp.views.index', name='home')
)

现在,您可以在模板中执行以下操作:

<a href="{% url home %}">Home</a>

这将正确解析为/testing/