zoukankan      html  css  js  c++  java
  • Django 静态文件配置

    静态文件配置

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

    static配置:

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

    STATIC_URL = '/static/'  # 别名
    
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, "static"),  # 实际名,即实际文件夹的名字
    ]
    # 注意:django对引用名和实际名进行映射,引用时,只能按照引用名来,不能按实际名去找

    media配置:

    MEDIA_URL = "/media/"
    
    # 用户上传的文件(针对models.py中的FileField、ImageField字段)保存到哪
    MEDIA_ROOT = os.path.join(BASE_DIR, "app名字", "media")
    # 配合settings.py里的MEDIA_URL = "/media/"配置,即对外开放了这个接口的权限
    from django.conf.urls import url
    from django.views.static import serve
    from . import settings
    
    urlpatterns = [
        url(r'^media/(?P<path>.*)$', serve, {"document_root": settings.MEDIA_ROOT}),
    ]

    ps:

    静态文件的处理又包括STATIC和MEDIA两类,这往往容易混淆,在Django里面是这样定义的:
        MEDIA:指用户上传的文件,比如在Model里面的FileFIeld,ImageField上传的文件。如果你定义
        MEDIA_ROOT = c:	empmedia,那么File=models.FileField(upload_to="abc/")#,上传的文件就会被保存到c:	empmediaabc
        eg:
            class blog(models.Model):
                Photo = models.ImageField(upload_to="photo")
    
        上传的图片就上传到c:	empmediaphoto,而在模板中要显示该文件,则在
        settings里面设置MEDIA_ROOT(必须是本地路径的绝对路径),一般是这样写:
            MEDIA_ROOT = os.path.join(BASE_DIR, 'media/').replace('\','/')
    
        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;
                    }
           具体可以参考如何在nginx部署django的资料。
  • 相关阅读:
    LeetCode "Jump Game"
    LeetCode "Pow(x,n)"
    LeetCode "Reverse Linked List II"
    LeetCode "Unique Binary Search Trees II"
    LeetCode "Combination Sum II"
    LeetCode "Divide Two Integers"
    LeetCode "First Missing Positive"
    LeetCode "Clone Graph"
    LeetCode "Decode Ways"
    LeetCode "Combinations"
  • 原文地址:https://www.cnblogs.com/believepd/p/9961585.html
Copyright © 2011-2022 走看看