在子目录上配置django

时间:2013-08-25 01:39:37

标签: django apache mod-wsgi

我有什么:

Apache http服务器,带有4个具有distinc域的虚拟服务器:

www.mydomain.com points to /var/www/mydomain/htdocs (php code)

它有效。所有其他域名都无关紧要。

在另一台机器上,我设计了一个带有两个应用程序的django项目,它与django的buit-in服务器配合得很好。

我需要什么:

www.mydomain.com pointing to /var/www/mydomain/htdocs (php code)
www.mydomain.com/recsys pointing to /opt/repsys (django code)

我想将PHP代码保留在root上并在内部/ repsys中安装django。

我可以将我的django代码放在root上但是当我尝试放入/ repsys时我有两个问题:

  • 我必须把/ repsys放在我的settings.py文件的所有网址上(这不是问题,但对我来说很奇怪)
  • 我从django代码中得到了这个错误:

    使用参数'(u'viewproject',)'和'找不到关键字参数'{}来反转'ajax'

我可以看到这是由于url的变化(现在它包含/ repsys)而django不知道如何反转这个url,但我不知道如何解决这个问题......

我的django是:1.5.1

这是我的wsgi.py

import os, sys
sys.path.append('/opt/repsys')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "repsys.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

和我的这个虚拟服务器的apache conf文件:

LoadModule wsgi_module modules/mod_wsgi.so
WSGISocketPrefix /var/run/wsgi
#WSGIPythonPath /opt/repsys/

<VirtualHost *:80>
    WSGIDaemonProcess repsyssite display-name=%{GROUP}
    WSGIProcessGroup repsyssite

    ServerAdmin blahhh@gmail.com
    ServerName  www.mydomain.com

    DocumentRoot "/var/www/mydomain/htdocs"

    WSGIScriptAlias /reprep /opt/repsys/repsys/wsgi.py
    Alias /reprep/static /opt/repsys/static_serve
    Alias /reprep/media /opt/repsys/media
    Alias /admin_media  /home/myuser/Django-1.5/django/contrib/admin/media

    <Directory opt/repsys>
        Order allow,deny
        Allow from all
    </Directory>

# Logfiles
    ErrorLog  /var/www/logs/glob/error.log
    CustomLog /var/www/logs/glob/access.log combined

</VirtualHost>

我的主要url.py包括:

url(r'^report/', include('report.urls', namespace="report")),

我的报告/ url.py包括:

url(r'^(?P<fn>\w+)/ajax/$', views.ajax, name='ajax'),

这是当我将项目放在root上但在子文件夹中失败时有效的行:

$('#viewreportdiv').load("{% url 'report:ajax' 'viewproject' %}", {proj: id});

有人可以指出如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

不确定你是否还在寻找答案,但我终于让自己有了这个工作,所以我想我会把它发布在这里。

我能够使用Graham Dumpleton在http://blog.dscpl.com.au/2012/10/requests-running-in-wrong-django.html

所做的文章来解决这个问题

最后,我的/etc/httpd/conf.d/django.conf文件如下所示

LoadModule wsgi_module modules/mod_wsgi.so

WSGIDaemonProcess mysite python-path=/var/www/html/mysite:/var/www/html/mysite/venv/lib/python2.7/site-packages
WSGISocketPrefix run/wsgi
WSGIScriptAlias /mysite /var/www/html/mysite/mysite_www/wsgi.py process-group=mysite

Alias /static/ /var/www/html/static/
Alias /docs/ /var/www/html/mysite/docs/_build/html/

<Directory /var/www/html/mysite/mysite_www>
<Files wsgi.py>
Allow from all
Order deny,allow
</Files>
</Directory>

这里我使用的是通过WSGIScriptAlias指定的Apache子目录,而不是使用<VirtualHost>

从那里我可以通过http://myserver.com/和django网站http://myserver.com/mysite/访问我的php页面。

注意,我必须确保在浏览Django(1.7)时使用尾部斜杠,否则我会进入主页面,但我的模板中的url反转将无法正确处理以获取子页面