Django项目关闭debug模式后,静态文件无法加载的解决办法

近期在做OpenStack Horizon项目的相关开发,OpenStack的整体环境使用DevStack安装,horizon开发过程中直接使用命令:
python manager.py runserver

开启内置服务器,由于项目中local_settings.py文件中的DEBUG=True,进行开发和调试一直没什么问题。

但是现在需要编写404,500等出错页面,在debug模式下出了错都会出现报错页面,无法转向到404或500页面,这时我将local_settings.py中的DEBUG设为false,这时候应该可以转向到404页面。实验证明确实如此,404和500页面都可以得到,但是出现了新的问题:css和js文件无法加载。

在网上找了找,很快就找到了问题的原因:Django框架仅在开发模式下提供静态文件服务。当我开启DEBUG模式时,Django内置的服务器是提供静态文件的服务的,所以css等文件访问都没有问题,但是关闭DEBUG模式后,Django便不提供静态文件服务了。想一想这是符合Django的哲学的:这部分事情标准服务器都很擅长,就让服务器去做吧!

OK,解决问题的办法也就出现了,我最开始想到的就是,使用项目正式部署是所使用的配置,由apache提供静态文件服务。不过解决问题的方法远不止一种,在stackoverflow上我发现了更有趣的方法。现在把自己总结的四种方法列在下面,共大家参考:

1.将静态文件由apache提供文件服务(类似正式部署):

    编辑/etc/apache2/sites-available/horizon文件:

#Alias /media /opt/stack/horizon/openstack_dashboard/static
Alias /static /opt/stack/horizon/openstack_dashboard/static
    建立静态文件链接: 
ln -sv /opt/stack/horizon/openstack_dashboard/static /opt/stack/horizon
    重启apache: 
sudo service apache2 restart
2.使用django.views.static.serve()方法。在URLconf中添加:
(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': '/path/to/media'}),
官方文档中评价这种办法:“The big, fat disclaimer”。

3.伪造404页面:使用正确的URL链接404页面模板;

4.改变项目运行方式:

python manage.py runserver --insecure
最后这种是stackoverflow上最受欢迎的方法,确实简单快捷!


参考链接:http://stackoverflow.com/questions/5836674/why-does-debug-false-setting-make-my-django-static-files-access-fail

https://docs.djangoproject.com/en/1.2/howto/static-files/#limiting-use-to-debug-true

Django项目关闭debug模式后,静态文件无法加载的解决办法
 
  • 发表于 3年前 
  • 阅读 2893 
  • 收藏 6 
  • 点赞 1 
  • 评论 1
近期在做OpenStack Horizon项目的相关开发,OpenStack的整体环境使用DevStack安装,horizon开发过程中直接使用命令:
python manager.py runserver

开启内置服务器,由于项目中local_settings.py文件中的DEBUG=True,进行开发和调试一直没什么问题。

但是现在需要编写404,500等出错页面,在debug模式下出了错都会出现报错页面,无法转向到404或500页面,这时我将local_settings.py中的DEBUG设为false,这时候应该可以转向到404页面。实验证明确实如此,404和500页面都可以得到,但是出现了新的问题:css和js文件无法加载。

在网上找了找,很快就找到了问题的原因:Django框架仅在开发模式下提供静态文件服务。当我开启DEBUG模式时,Django内置的服务器是提供静态文件的服务的,所以css等文件访问都没有问题,但是关闭DEBUG模式后,Django便不提供静态文件服务了。想一想这是符合Django的哲学的:这部分事情标准服务器都很擅长,就让服务器去做吧!

OK,解决问题的办法也就出现了,我最开始想到的就是,使用项目正式部署是所使用的配置,由apache提供静态文件服务。不过解决问题的方法远不止一种,在stackoverflow上我发现了更有趣的方法。现在把自己总结的四种方法列在下面,共大家参考:

1.将静态文件由apache提供文件服务(类似正式部署):

    编辑/etc/apache2/sites-available/horizon文件:

#Alias /media /opt/stack/horizon/openstack_dashboard/static
Alias /static /opt/stack/horizon/openstack_dashboard/static
    建立静态文件链接: 
ln -sv /opt/stack/horizon/openstack_dashboard/static /opt/stack/horizon
    重启apache: 
sudo service apache2 restart
2.使用django.views.static.serve()方法。在URLconf中添加:
(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': '/path/to/media'}),
官方文档中评价这种办法:“The big, fat disclaimer”。

3.伪造404页面:使用正确的URL链接404页面模板;

4.改变项目运行方式:

python manage.py runserver --insecure
最后这种是stackoverflow上最受欢迎的方法,确实简单快捷!


参考链接:http://stackoverflow.com/questions/5836674/why-does-debug-false-setting-make-my-django-static-files-access-fail

https://docs.djangoproject.com/en/1.2/howto/static-files/#limiting-use-to-debug-true

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值