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 sysfrom 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 apacheServerAdmin [email protected]
DocumentRoot"/usr/local/apache2/htdocs"
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Options Indexes FollowSymLinksAllowOverride 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应该带有一个初始斜杠,如下所示:
这样,应用程序只能在Django Development Server上工作,而不能在Apache上工作。
相反,如果使用的URL没有初始斜杠,例如:
该应用程序在Django开发服务器和Apache上都能正常工作!
BR/>即使在django urls.py文件的模式匹配上,也必须避免使用起始斜杠:
如:
而不是这样:
也许这对于专业的django用户来说是显而易见的,但是如果你像我一样是新手,这会让你放松一定的时间,因为这是一个很难被发现的问题。