关于python:获取从django开发服务器传递到apache服务器的void模板

Obtaining void template passing from django development server to apache server

我有一个Django应用程序,它在Django开发服务器下工作得很好。现在我尝试使用mod wsgi在apache2.2下运行它。
在Apache的httpd.conf文件中,我添加了:

1
2
3
<IfModule wsgi_module>
    WSGIScriptAlias /index my_path_to_wsgi_modules/django.wsgi
</IfModule>

django.wsgi模块包含了django文档中解释的所有基本配置:http://docs.djangoproject.com/en/dev/howto/deployment/modwsgi/
不幸的是,当我运行服务器并尝试访问主页时,我获得了模板页,但其中没有变量数据。服务器日志显示:

1
[Fri Feb 18 13:50:33 2011] [error] [client 127.0.0.1] File does not exist: /usr/local/apache2/htdocs/api, referer: http://127.0.0.1/example/

< BR>正如我之前所说的,奇怪的是,相同的代码在Django开发服务器下工作得很好。我是新来的网络应用程序,有人能帮忙吗?

我的django.wsgi文件如下:

import os
import sys

from os.path import sep

basepath = '/home/example/WorkSpace/examplews/src'

sys.path.append(basepath)
sys.path.append('/home/example/WorkSpace/examplews/src/examplews')

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

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

我的httpd.con文件如下:

ServerRoot"/usr/local/apache2"

Listen 80

LoadModule wsgi_module modules/mod_wsgi.so

User apache
Group apache

ServerAdmin [email protected]

DocumentRoot"/usr/local/apache2/htdocs"


Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all


Options Indexes FollowSymLinks

AllowOverride None

Order allow,deny
Allow from all


DirectoryIndex index.html index.php index.sh default.jsp


Order allow,deny
Deny from all
Satisfy All

ErrorLog"logs/error_log"

LogLevel warn


LogFormat"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat"%h %l %u %t \"%r\" %>s %b" common


LogFormat"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio

CustomLog"logs/access_log" common




WSGIScriptAlias /main /home/example/WorkSpace/examplews/src/examplews/apache_conf/django.wsgi


Order allow,deny
Allow from all

DefaultType text/plain


TypesConfig conf/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz


SSLRandomSeed startup builtin
SSLRandomSeed connect builtin


最后我发现了错误。它没有连接到httpd.conf文件,而是如何将URL同时指定给django urls.py文件和模板。
当我以这种方式安装myapp时:

1
WSGIScriptAlias /myapp my_path_to_wsgi_module/django.wsgi

我相信django模板文件中指定的URL应该带有一个初始斜杠,如下所示:'/api/dir'
这样,应用程序只能在Django Development Server上工作,而不能在Apache上工作。

相反,如果使用的URL没有初始斜杠,例如:
'api/dir'
该应用程序在Django开发服务器和Apache上都能正常工作!
BR/>即使在django urls.py文件的模式匹配上,也必须避免使用起始斜杠:
如:(r'^api/dir$', 'available_services')
而不是这样:(r'^/api/dir$', 'available_services')

也许这对于专业的django用户来说是显而易见的,但是如果你像我一样是新手,这会让你放松一定的时间,因为这是一个很难被发现的问题。