使用mod_python在子目录中配置Django项目。管理后台无法工作
大家好。我在尝试把我的django项目配置在根目录的一个子目录下,但一直没能成功。(在本地运行得很好。)我按照django官方文档的指引,用mod_python来部署项目。真正的问题是,每当我尝试访问管理界面或我的应用的任何视图时,都会出现“页面未找到”的错误。
这是我在Fedora 7的/etc/httpd/conf.d/目录下的python.conf文件:
LoadModule python_module modules/mod_python.so
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonOption django.root /mysite
PythonDebug On
PythonPath "['/var/www/vhosts/mysite.com/httpdocs','/var/www/vhosts/mysite.com/httpdocs/mysite'] + sys.path"
我知道/var/www/并不是放置我的django项目的最佳位置,但我只是想把我正在进行的工作演示给客户,之后我会更改位置。
举个例子,如果我访问www.domain.com/mysite/,我能看到我在mysite.urls中配置的首页视图。但是我无法访问我的app.urls(www.domain.com/mysite/app/)和任何admin.urls(www.domain.com/mysite/admin/)。
这是我的mysite.urls:
urlpatterns = patterns('',
url(r'^admin/password_reset/$', 'django.contrib.auth.views.password_reset', name='password_reset'),
(r'^password_reset/done/$', 'django.contrib.auth.views.password_reset_done'),
(r'^reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$', 'django.contrib.auth.views.password_reset_confirm'),
(r'^reset/done/$', 'django.contrib.auth.views.password_reset_complete'),
(r'^$', 'app.views.index'),
(r'^admin/', include(admin.site.urls)),
(r'^app/', include('mysite.app.urls')),
(r'^photologue/', include('photologue.urls')),
)
我还尝试把admin.site.urls改成'django.contrib.admin.urls',但也没成功。我在网上查了很多资料,看看其他开发者是怎么配置他们的django项目的,但没有找到太多关于在子目录下部署django的信息。我在INSTALLED_APPS中启用了admin,settings.py也没问题。
如果你们能给我一些指导,或者告诉我哪里做错了,我会非常感激。
谢谢。
2 个回答
如果你的settings.py文件设置正确,里面的INSTALLED_APPS也没问题,并且在开发服务器上能正常运行,那我觉得问题可能出在你的Apache配置文件上。
你可以试着运行我的Python应用程序,它可以为mod_python和Django创建Apache配置文件。源代码可以在这里找到,地址是github.com。一旦你有了一个能用的配置文件,就可以对它进行修改。
运行方式如下:
C:\Users\hughdbrown\Documents\django\Apache-conf>python http_conf_gen.py --flavor=mod_python --source_dir=. --server_name=foo.com --project_name=foo
Writing 'foo.vhost.python.conf'
运行结果看起来是这样的:
# apache_template.txt
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@foo.com
ServerName foo.com
DocumentRoot "./foo/"
<Location "/">
# without this, you'll get 403 permission errors
# Apache - "Client denied by server configuration"
allow from all
SetHandler python-program
PythonHandler django.core.handlers.modpython
PythonOption django.root /foo
PythonDebug On
PythonPath "[os.path.normpath(s) for s in (r'.', r'C:\Python26\lib\site-packages\django') ] + sys.path"
SetEnv DJANGO_SETTINGS_MODULE foo.settings
PythonAutoReload Off
</Location>
<Location "/media" >
SetHandler None
allow from all
</Location>
<Location "/site-media" >
SetHandler None
allow from all
</Location>
<LocationMatch "\.(jpg|gif|png)$">
SetHandler None
allow from all
</LocationMatch>
</VirtualHost>
我在用mod_wsgi,所以不太确定是不是都一样。不过在我的urls.py文件里,我写了:
(r'^admin/(.*)', admin.site.root),
在我的Apache配置文件里,我有这个:
Alias /admin/media/ /usr/lib/python2.5/site-packages/django/contrib/admin/media
你的路径可能会有所不同。