在子目录上配置Django [英] Configure django on sub directory
问题描述
我所拥有的:
带有disinc域的4台虚拟服务器的Apachehttp服务器:
www.mydomain.com points to /var/www/mydomain/htdocs (php code)
而且很管用。所有其他域都无关紧要。
在另一台机器上,我设计了一个带有两个应用程序的Django项目,它与Django的内置服务器配合得很好。
我需要的:
www.mydomain.com pointing to /var/www/mydomain/htdocs (php code)
www.mydomain.com/recsys pointing to /opt/repsys (django code)
我希望将PHP代码保留在根目录上,并将Django安装在/repacs中。
我可以将我的Django代码放在根目录下,但当我尝试放入/reops时,我遇到了两个问题:
- 我不得不在settings.py文件的所有URL上放置/repeg(这不是问题,但对我来说很奇怪)
我收到了来自Django代码的以下错误:
找不到带有参数‘(u’viewproject‘,)’和关键字参数‘{}’的‘ajax’的反向
我可以看到这是由于url中的更改(现在它包括/repacs),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()
和此虚拟服务器的我的ApacheConf文件:
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")),
My Report/url.py包括:
url(r'^(?P<fn>w+)/ajax/$', views.ajax, name='ajax'),
下面这行代码在我将项目放在根目录上时有效,但在子文件夹中失败:
$('#viewreportdiv').load("{% url 'report:ajax' 'viewproject' %}", {proj: id});
谁能指出如何修复它?
推荐答案
不确定您是否仍在寻找这个问题的答案,但我终于自己解决了这个问题,所以我想我应该把它发布在这里。
我用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站点VIShttp://myserver.com/mysite/
进入我的php页面。
请注意,在浏览到Django(1.7)时,我必须确保使用尾随斜杠,否则我将转到主页,但模板中的url反转将无法正确处理以转到子页面。
这篇关于在子目录上配置Django的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!