Django静态文件配置

在第一章节中,我们简单介绍django基本操作,并且可以使用render、HttpResponseredirect呈现出一些粗糙的页面

现在,如果在django项目返回一个html文件,该文件内部引入的CSS和JS文件又才存放在哪里呢?会不会访问不到呢?

2-3大章节为铺垫。

一、引子

章节通过案例,来详细介绍为什么要静态文件进行配置配置之后可以实现什么效果,不配置又会有什么效果

1.1 完成一个login页面

一步添加路由,以及对应视图函数

# urls.py
urlpatterns = [
 '''略'''
    url(r'^login/',views.login),
 '''略'''
]
# views.py
def login(request):
    return  render(request,'login.html')	

第二步:利用bootstrap书写login页面

引入bootstrap有两种方式

由于在实际项目中CDN有挂掉的可能从而影响业务,所以往往都是采用本地存储

django项目中,CSS和JS或者其他框架插件都是存放项目根目录下的static目录

HTML代码

<!DOCTYPE html>
<html lang="en"&gt;
<head&gt;
    <meta charset="UTF-8"&gt;
    <title&gt;Title</title&gt;
                             <!--..表示上一级目录--&gt;
    <link rel="stylesheet" href="../static/others/bootstrap.min.css"&gt;  
    <link rel="stylesheet" href="../static/others/bootstrap.js">
    <link rel="stylesheet" href="../static/others/jquery-3.6.0.min.js">
</head>
<body>

<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <h1 class="text-center">Login</h1>
            <br>
            <form class="form-horizontal" action=""  method="post">
              <div class="form-group">
                <label for="ipt_uname" class="col-sm-2 control-label">Uname</label>
                <div class="col-sm-10">
                  <input type="text" class="form-control" id="ipt_uname" placeholder="Uname">
                </div>
              </div>
              <div class="form-group">
                <label for="inputPassword3" class="col-sm-2 control-label">Password</label>
                <div class="col-sm-10">
                  <input type="password" class="form-control" id="inputPassword3" placeholder="Password">
                </div>
              </div>
              <div class="form-group">
                <div class="col-sm-offset-2 col-sm-10">
                  <div class="checkbox">
                    <label>
                      <input type="checkbox"> Remember me
                    </label>
                  </div>
                </div>
              </div>
              <div class="form-group">
                <div class="col-sm-offset-2 col-sm-10">
                  <button type="submit" class="btn btn-default">Sign in</button>
                </div>
              </div>
            </form>
        </div>
    </div>
</div>

</body>
</html>

1.1.1 附:项目文件结构

我们html文件默认都放在templates文件夹下,将网站使用的静态文件默认都放在static文件夹下。

这里由于使用的有jQuery和BootStrap框架,所以是在static的other目录

2022-08-31

文档重新汇总修改了很多地方,所以这里路径和下列的代码可能有出处,后面代码静态文件将存放在各自的cssjs文件夹中,不存在有others文件夹了。

image-20210921180451640

1.2 查看样式继承情况

直接打开

image-20210921174056770

启动Django项目并访问接口

image-20210921174148834

通过上述展示出的效果我们发现通过django访问时,页面继承bootstrap样式。

我们先通过F12–>网络查看cssjs文件访问状态

image-20210921174352993

全部都报404 not found,找不到该资源

image-20220831020430593

观察这里请求网址,再仔细想想为什么我们访问http://127.0.0.1:8000/index/和http://127.0.0.1:8000/admin/ 就没有问题呢?

总结

二、静态文件配置

2.1 配置

作用

以下为settings.py文件

# 略
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 略
STATIC_URL = '/static/'

# 以下为纯手写
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static')
]


'''
注:
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static'),
    os.path.join(BASE_DIR,'static1'),
    os.path.join(BASE_DIR,'static2'),]
    
可以多个路径,从上往下找,找不到就报错。
'''

先来看看效果

image-20210922170402322

此时我们可以看到,访问127.0.0.1/login页面已经没什么问题了,静态资源都成功的访问到了

2.2 静态文件配置详解

什么只在settings.py中添加一变量值为列表,列表元素路径)就可以实现访问得到静态资源呢?

配置文件代码

类似于templates模板配置一样,利用路径拼接templates文件夹添加到环境变量中。

静态文件配置,也同样是利用路径拼接,将static文件夹开放访问.

区分两个static的作用

STATIC_URL = '/static/'  # 这里static为"令牌"

STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static')  # 这里的static存放静态文件的文件夹
]

什么是“令牌”:

验证

总结:

  • 修改了令牌之后,静态资源访问时就必须是以令牌开头,那么此时HTML文件中引入静态文件,就不能直接使用相对路径的方式引入了,因为令牌只要不是static,那么肯定访问不到。

  • '''
    静态文件路径:/static/js/jquery-min.js
    令牌名:   static_file
    那么前端HTML引入时的路径就等于    /static_file/js/jquery-min.js
    '''
    

    流程

    • django发现访问路径是以static_file打头,且令牌也是static_file后,会在STATICFILES_DIRS表中的所有路径下进行查找
    • 在列表的所有路径下,查找没有js文件夹,再查询js文件夹中有没有一个叫jquerymin.js的文件。
    • 如果有,那么成功访问,如果没有则资源访问失败

2.3 动态解析

动态解析可以实现效果

格式

测试

  • 将令牌改为xxx

image-20210922232446075

原文地址:https://blog.csdn.net/liuyu_719/article/details/129096143

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_31444.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注