【问题标题】:Configure django on sub directory在子目录上配置 django
【发布时间】:2013-08-25 01:39:36
【问题描述】:

我有什么:

具有 4 个具有不同域的虚拟服务器的 Apache http 服务器:

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 代码保留在 root 上,并将 django 安装在 /repsys 中。

我可以将我的 django 代码放在根目录下,但是当我尝试放入 /repsys 时,我遇到了两个问题:

  • 我不得不将 /repsys 放在我的 settings.py 文件的所有 url 上(这不是问题,但对我来说很奇怪)
  • 我在 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'),

当我将项目放在根目录下时,这行有效,但在子文件夹中时失败:

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

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

【问题讨论】:

  • 我相信别名应该一次只定义一个路径。所以你尝试定义 2 个不同的虚拟主机,每个虚拟主机都有不同的端口。
  • 但它正在工作,使用此配置,我可以在 root 上执行 PHP,在子目录上执行 django。当我尝试在模板(或视图)中反转 URL 时,唯一的问题是在 django 上。它在子目录中失败,但在 django 是根目录时运行良好。其他一切正常。有什么想法吗?
  • 我遇到了完全相同的问题。

标签: django apache mod-wsgi


【解决方案1】:

不确定您是否还在寻找这个问题的答案,但我终于自己解决了这个问题,所以我想我会在这里发布。

我可以使用 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 子目录,而不是使用&lt;VirtualHost&gt;

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多