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

    下载了个网页模板,建好Django工程,runserver后页面不显示css,jpg之类的静态文件。找了一下网上的解决方案,照着做也没对,主要是他们没说为什么要这么做,每个人搭建的环境不一样,解决的方法肯定也不完全一样。这里把解决的思路写下来,供大家参考。

    1. 静态文件丢失是因为文件路径找不到。server端会有如下提示

    [21/Sep/2014 11:28:01] "GET /static/img/f.png HTTP/1.1" 404 1941
    [21/Sep/2014 11:28:01] "GET /template/static/css/style.css HTTP/1.1" 404 1980
    [21/Sep/2014 11:28:01] "GET /static/img/r.png HTTP/1.1" 404 1941
    [21/Sep/2014 11:28:01] "GET /static/img/t1.png HTTP/1.1" 404 1944

    2. 需要修改settings.py文件中的STATIC_ROOT, STATIC_URL, STATICFILES_DIRS三个配置项,但具体怎么修改就与各人搭建的环境有关了。

    STATIC_URL配置的是匹配的静态文件请求的url,这与页面中的链接地址要一致。如html文件中的静态文件链接为/static/,则配置项为

    * foo.html *
    <link rel="stylesheet" type="text/css" href="/static/css/style.css">
    
    * settings.py *
    STATIC_URL = '/static/'

    STATIC_URL的作用等同于在urls.py文件中匹配url地址请求

    3. 当匹配到静态文件请求时,则会在STATICFILES_DIRS中查找静态文件,静态文件一般都是集中存放,在同一父目录下,因此可以设置STATIC_ROOT来减少重复输入。由于配置项不支持相对路径,只能使用绝对路径,考虑到移植的灵活性,STATIC_ROOT可写为

    STATIC_ROOT = os.path.join(os.path.dirname(__file__), 'template/static')

    这里的__file__是settings.py文件,即以settings.py文件所在的目录出发,找到静态文件所处的目录。

    4. 最后是静态文件所处的位置

    STATICFILES_DIRS = (
        ('css', os.path.join(STATIC_ROOT, 'css')),
        ('img', os.path.join(STATIC_ROOT, 'img')),
    )

    每类静态文件设置为一个元组,元组第一项‘css’,‘img’等要与html中链接地址保持一致,不能出现配置的('img', ...),但请求的链接地址为:.../static/images/abc.jpg,而元组第二项的‘css’和‘jpg‘要与文件夹名一致。

  • 相关阅读:
    #C++初学记录(sort函数)
    #C++初学记录(贪心算法#结构体#贪心算法)
    #C++初学记录(初识汉诺塔)
    vuex中使用多模块时,如果不同模块中action有名字冲突该如何解决
    vue中二次封装别人组件,动态传属性使用v-bind="$attrs" 和 v-on="$listeners"
    在vue.config.js项目中配置proxy解决跨域问题
    Vue里报错:Maximum call stack size exceeded
    git报错:pre-commit hook failed (add --no-verify to bypass)
    十大排序算法,用JS写出来
    基数排序(JS代码)
  • 原文地址:https://www.cnblogs.com/newerly/p/3984408.html
Copyright © 2011-2022 走看看