• 02.Django静态文件配置


    Django静态文件配置

    概述:
      静态文件交由Web服务器处理,Django本身不处理静态文件。简单的处理逻辑如下(以nginx为例):
      URI请求-----> 按照Web服务器里面的配置规则先处理,以nginx为例,主要求配置在nginx.
      conf里的location
      |---------->如果是静态文件,则由nginx直接处理
      |---------->如果不是则交由Django处理,Django根据urls.py里面的规则进行匹配
      以上是部署到Web服务器后的处理方式,为了便于开发,Django提供了在开发环境的对静态文件的处理机制


    01.static配置:

    STATIC主要指的是如css,js,images这样文件:

    STATIC_URL = '/static/' # 别名
    STATICFILES_DIRS = (
    os.path.join(BASE_DIR,"static"), #实际名 ,即实际文件夹的名字
    )

    注意点1:
    django对引用名和实际名进行映射,引用时,只能按照引用名来,不能按实际名去找
    <script src="/statics/jquery-3.1.1.js"></script>
    ------error-----不能直接用,必须用STATIC_URL = '/static/':
    <script src="/static/jquery-3.1.1.js"></script>

    注意点2:
    如果把static放在app里
    STATICFILES_DIRS = (
    ("app01",os.path.join(BASE_DIR, "app01/statics")),
    )

    <script src="/static/app01/jquery.js"></script>


    02.media配置:
    用户上传文件的文件夹

    # in settings:

    MEDIA_URL="/media/"
    MEDIA_ROOT=os.path.join(BASE_DIR,"app01","media","upload")


    # in urls:

    from django.views.static import serve
    url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}),

    静态文件的处理又包括STATIC和MEDIA两类,这往往容易混淆,在Django里面是这样定义的:

    MEDIA:指用户上传的文件,比如在Model里面的FileFIeld,ImageField上传的文件。如果你定义

    MEDIA_ROOT=c: empmedia,那么File=models.FileField(upload_to="abc/")#,
    上传的文件就会被保存到c: empmediaabc

    eg:

    class blog(models.Model):
      Title=models.charField(max_length=64)
      Photo=models.ImageField(upload_to="photo")


    上传的图片就上传到c: empmediaphoto,而在模板中要显示该文件,则在这样写
    在settings里面设置的MEDIA_ROOT必须是本地路径的绝对路径,一般是这样写:

    BASE_DIR= os.path.abspath(os.path.dirname(__file__))
    MEDIA_ROOT=os.path.join(BASE_DIR,'media/').replace('\','/')

    MEDIA_ROOT=os.path.join(BASE_DIR, '/media/')


    MEDIA_URL是指从浏览器访问时的地址前缀,举个例子:
    MEDIA_ROOT=c: empmediaphoto
    MEDIA_URL="/data/"
    在开发阶段,media的处理由django处理:

    访问http://localhost/data/abc/a.png就是访问c: empmediaphotoabca.png

    在模板里面这样写<img src="/media/abc/a.png">

    在部署阶段最大的不同在于你必须让web服务器来处理media文件,因此你必须在web服务器中配置,
    以便能让web服务器能访问media文件
    以nginx为例,可以在nginx.conf里面这样:

    location ~/media/{
    root/temp/
    break;
    }

  • 相关阅读:
    vue 设置请求超时时间处理
    element 表格只展开一行(点击下一行上一行关闭)
    element菜单刷新后定位问题?
    自己觉得不错的滚动条样式
    $.ajax()方法详解
    安卓获取自有证书的SHA1码
    sortable.js 拖拽排序及配置项说明
    uni-app 引入本地iconfont的正确姿势以及阿里图标引入
    mui slider禁止滑动
    stl源码剖析 详细学习笔记 仿函数
  • 原文地址:https://www.cnblogs.com/QQL-anatkh/p/9568274.html
Copyright © 2020-2023  润新知