Django: 只显示空白页面

3 投票
3 回答
3010 浏览
提问于 2025-04-16 22:21

我有一台装了Apache的服务器,想要启动一个用Django写的网站。我使用的是mod_wsgi。现在一切都准备好了。但是服务器的响应是空的,错误日志里也没有任何信息。你知道这可能是什么原因吗?

如果有哪个文件可能有帮助(比如*.wsgi,settings.py),我可以把它附上。

Prochazky.wsgi

import os
import sys
import site

os.environ['PYTHON_EGG_CACHE'] = '/home/prochazky/venv/.python-eggs'

site.addsitedir('/home/prochazky/venv/lib/python2.6/site-packages')

os.environ['DJANGO_SETTINGS_MODULE'] = 'Prochazky.settings'

sys.path.append('/home/prochazky/')
sys.path.append('/home/prochazky/Prochazky/')

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Apache虚拟主机配置:

<VirtualHost *:80>
    WSGIScriptAlias / /home/prochazky/Prochazky/Prochazky.wsgi
    ServerName testing.prochazky.net
    DocumentRoot /home/prochazky

    ErrorLog /home/prochazky/wsgi.log
</VirtualHost>

3 个回答

0

这是我设置中的内容(为了保护无辜有罪的人,名字已经修改)。

<VirtualHost *:80>
        ServerName site.domain.com 
        ServerAdmin webmaster@domain.com 

        WSGIScriptAlias / /home/user/site/django.wsgi

        <Directory /home/user/site/>
                Options FollowSymLinks
                AllowOverride None 
                Order allow,deny
                allow from all
        </Directory>
         ... etc etc etc.

我觉得你需要用到 <directory> 这个标签,才能让服务器访问 .wsgi 文件。
不过我并不是 apache 的专家,所以别把这个例子当作完美的参考。(我觉得只需要 order Allow, denyallow from all 这两行就可以了)

一个不错的网站可以参考: http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango

1

你的根网址或视图的模板文件可能是空的,或者说它的内容被认为是空的,这种情况有可能发生吗?

举个例子,如果你的模板是这样的:

{% extends "base.html" %}
{% block content %}blah blah{% endblock %}

而且 base.html 这个文件没有使用一个叫“content”的区域,那么你模板里的内容区域就不会被使用,尽管你有内容,但最后显示出来的结果还是空的。

7

首先,先试着让一个简单的“你好,世界”程序运行起来,而不是直接用Django。可以看看这个:

http://code.google.com/p/modwsgi/wiki/WhereToGetHelp?tm=6#Conference_Presentations

还有,建议你阅读一下这个:

http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide

不过我猜,你可能是在同一个Apache里加载了mod_python。如果mod_python不兼容,就会出现这种情况,主Apache的错误日志里只会显示一个分段错误的信息。


更新 1

你是不是在同一个Apache里加载了mod_php?有时候它们会有冲突的共享库需求,导致崩溃。如果你也在加载它,建议在Apache的配置中把它禁用。

另外,试着设置:

WSGIApplicationGroup %{GLOBAL}

这样可以强制使用主解释器,避免一些第三方扩展没有正确编写以在子解释器中工作而导致的问题。

不过,你真的需要更仔细地查看主Apache的错误日志,而不是虚拟主机的日志。当你发出请求时,运行一个'tail -f'命令,确保你能看到那里的信息,特别是分段错误或类似的消息。关于进程崩溃和导致空白页面的消息不会出现在虚拟主机的错误日志里。

撰写回答