Django静态文件丢失

3 篇文章 0 订阅
3 篇文章 0 订阅

runserver启动方式

一般来说,使用runserver方式启动方式,对静态文件的加载无需做什么处理,Django会自动对路由进行处理。但是在将debug=False后会发现会出现静态文件丢失的现象。

这是因为在debug=False后,django.contrib.staticfiles会自动关闭,Django不会再自动搜索静态文件,若想要继续使用Django对静态文件进行路由,可以参考官方文档的做法,在urls.py中添加静态路由。

# settings.py
# e.g.
STATIC_URL = "/static/"
STATIC_ROOT = "/var/www/example.com/static/"

# urls.py
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

这种方式的使用需要提前将所有的静态文件搜集到指定的STATIC_ROOT目录下,可以使用python manage.py collectstatic将静态文件收集到STATIC_ROOT目录下。

在开发过程中,也可以使用django.views.static.serve()视图来对静态文件进行路由。

# settings.py
# e.g.
STATIC_URL = "/static/"
STATIC_ROOT = "/var/www/example.com/static/"

# urls.py
from django.conf import settings
from django.views import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
    url(r'^static/(?P<path>.*)$', static.serve, {'document_root': settings.STATIC_ROOT}, name='static'),
]

这种方法一般可以用于用户对上传静态文件路由

另外要注意两种方法的导入from django.conf.urls.static import staticfrom django.views import static的路径不一样。(不要问为什么会特别提一下,都是泪~~~)

uWsgi启动

uWsgi默认是不处理静态文件的,但是可以在uwsgi.ini中使用static-map属性来实现对静态文件的路由。

[uwsgi]
# ...  其他的一些配置 ...
# 让uWSGI支持静态文件
static-map = /static=/srv/django/static

和上面的一样要提前收集所有静态文件到指定的static-map目录下

uWsgi + Nginx启动方式 (推荐)

之前说到了,uWsgi默认是不处理静态文件。除了使用上面介绍的方式,还可以使用nginx处理静态文件。

server
{
    listen 80;
    # 域名 e.g.  cc.example.xyz
    server_name cc.example.xyz;

    location /static {
        # 静态文件路由指定路由文件所在目录
        # e.g. 静态文件在 /proj/static
        alias /proj/static;
    }
    
    location / {
        include uwsgi_params;  
        uwsgi_pass 0.0.0.0:8001;
    }
    
    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }

    access_log  /data/log/nginx/cc.example.xyz.log;
    error_log  /data/log/nginx/cc.example.xyz.error.log;
}
[uwsgi]

# ...  其他的一些配置 ...
socket = 0.0.0.0:8001
module = conf.wsgi

uwsgi启动的8001端口,nginx 设置 uwsgi_pass 0.0.0.0:8001;,另外记得是socket如果http好像不行

更多笔记可以访问我的blog网站

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值