django静态文件配置和使用

这篇具有很好参考价值的文章主要介绍了django静态文件配置和使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、首先需要了解的知识点是:

1、出于对效率和安全的考虑,django管理静态文件的功能仅限于在开发阶段的debug模式下使用,且需要在配置文件的INSTALLED_APPS中加入django.contrib.staticfiles(django工程创建后默认已经安装),网站正式部署上线后,静态文件是由Nginx等服务器管理。

二、接下来看下如何配置和引入静态文件

先把工程的目录结构展示出来,方便后文叙述

django静态文件配置和使用

相关配置:

1、首先确保在配置文件的INSTALLED_APPS中加入了 django.contrib.staticfiles(默认已加入)

2、在配置文件中配置STATIC_URL,如:

STATIC_URL="/st/"  # STATIC_URL的作用是用于拼接静态文件的存储路径。

3、在配置文件中配置STATICFILES_DIRS为静态静态文件的存储路径,比如:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static")  # 即静态文件存放在 BASE_DIR/static 下(和manage.py同级目录下),注意BASE_DIR指django工程的绝对路径
]

配置完成之后就可以在模板中导入静态文件了

引入静态文件:

1、在模板文件中导入static模板标签,即在模板文件的开头处写上:{% load static %}

django静态文件配置和使用

说明:static模板标签(即{% static "url" %}标签)并不是django内置的模板标签,而是属于自定义模板标签,所以我们不能直接使用,需要先导入该模板标签才行。

那么这个标签在哪里定义的呢?如果是pycharm,直接在{% load static %}中,把光标放在static上,按ctr+b定位到定义处,如下图:

django静态文件配置和使用

根据注释,我们可以看出这个模板标签的作用就是传递一个静态文件的相对路径(即形参path),返回该静态文件的绝对路径。

2、使用{% static "url.."%}标签引入静态文件

第1步中我们已经导入了static模板标签,也了解了它的作用,下面就可以使用它引入静态文件了。先给个例子,方便解释,比如我们需要在模板中引入/static/css/下的bootstrap.css,那么就应该这么写:

<link rel="stylesheet" href="{% static 'css/bootstrap.css' %}">

至于为什么路径中的/static/没写在static标签处,我们等下再解释。

结合static函数的源码(即static标签定义),上面link标签中的static模板标签的含义就是,把bootstrap.css的相对路径'css/bootstrap.css'传给了static函数的path形参,所以它应该给我们返回一个该静态文件的绝对路径。由于我们在上文配置中配置了STATIC_URL="/st/",所以在浏览器端,查看该模板对应的HTML源码,可以发现django把上面这个标签渲染出来的结果是:

<link rel="stylesheet" href="/st/css/bootstrap.css">

 "/st/css/bootstrap.css"就是static标签返回的绝对路径,那么为什么前面多个/st/?这是我们留下的第二个疑问,往后读就能找到答案。

现在解释上面留下的第一个疑问,为什么路径中的/static/没写在static标签处?这个又涉及到一个配置:

django静态文件配置和使用

关于这个配置,不做深入探讨,我们只需要简单了解他的作用即可,具体信息考参考官网(https://docs.djangoproject.com/en/2.2/ref/settings/#std:setting-STATICFILES_FINDERS)

官网给出的说明就是,django在查找静态文件的时候,首先会在STATICFILES_DIRS指定的路径中寻找,找不到就会在各个app下的static文件夹下面找,由于我们在配置文件中已经指定了static文件夹,也就是说已经告诉了django,首先去static文件夹中找指定的静态文件,所以上面的static标签就会自动去static文件夹中去找css下的bootstrap.css这个静态文件,所以就没必要再把/static/写上了,否则就成了告诉django去static文件夹下的static/css/找bootstrap.css,这样就会找不到了。

至此,我们已经知道了如何引入static标签,以及使用static标签引入静态文件,顺带也把STATICFILES_DIRS配置的作用说明了,还有一个模糊的地方就是STATIC_URL配置是个什么鬼,为什么django会把上面static标签返回的绝对路径前面加一个/st/?

要说明STATIC_URL的作用,首先要捋一捋django处理http请求的过程:浏览器发送一个http请求,django的url解析器解析url,然后匹配到相应的视图函数处理请求。再看django最终把我们上面的标签渲染成如下:

<link rel="stylesheet" href="/st/css/bootstrap.css">

那么浏览器去请求这个静态文件的时候,其完整请求路径应该是http://localhost:8000/st/css/bootstrap.css,django是如何解析这个请求路径,然后找到相应的静态文件并返回的呢?

回忆一下我们开头讲的,要在django中管理静态文件,需要安装django.contrib.staticfiles这个APP,所以猜测,django处理这个请求都是在这个APP中完成的,进入到这个APP

django静态文件配置和使用

发现这个APP结构和我们自定义的APP差不多,猜测django处理上述静态文件路径(解析路径,路由到视图函数处理请求等)就是在urls.py中完成的,点开:

django静态文件配置和使用

看到上图中的urlpatterns = [],是不是熟悉的感觉?

在点开截图中椭圆形框出的static函数,看干了什么

django静态文件配置和使用

看到re_path()是不是更熟悉的感觉?其实这个APP解析url和路由到指定视图函数跟我们自定义的APP逻辑是一样的。

很简单,就是把url中的前缀/st/提取出来,作为正则表达式的匹配字符串,也就是说,浏览器发出的http:8000/st/css/bootstrap.css的请求,由于该地址前缀是/st/,所以会被这个规则匹配到,从而路由到相应的视图函数进一步处理。

这样,我们就明白了STATIC_URL配置项的作用了,就是使用{% static "url.." %}时,把STATIC_URL配置的字符串拼接到静态文件的路径上作为其前缀,以便于在django.contrib.staticfiles这个APP解析出静态文件的真正路径,然后带着这个真正路径去STATICFILES_DIRS配置的路径下找,找不到就去每个APP下的static文件夹中找。

所以说,STATIC_URL配置的字符串只是个符号,你想写啥都行(当然要守规矩)。

另外的注意事项:

在我们配置的{% static 'css/bootstrap.css' %},中,如果写成{% static '/css/bootstrap.css' %}也就是css前面有个"/",那么django就会认为这是一个绝对路径,而不会把STATIC_URL配置项加到css前面,官网:https://docs.djangoproject.com/en/2.2/topics/forms/media/#form-asset-paths 中的Paths in asset definitions条目

 还有STATIC_ROOT配置,参见:https://docs.djangoproject.com/en/2.2/ref/settings/#std:setting-STATICFILES_STORAGE文章来源地址https://www.toymoban.com/news/detail-434302.html

到了这里,关于django静态文件配置和使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用gunicorn部署django项目时,发现静态文件加载失败问题,及部署

    from   django.contrib.staticfiles.urls  import   staticfiles_urlpatterns     urlpatterns  =   [    url( \\\'^admin/\\\' , admin.site.urls), ] urlpatterns  + =   staticfiles_urlpatterns() # 修改settings.py文件的:INSTALLED_APPS INSTALLED_APPS = [ ... \\\'gunicorn\\\', # 把gunicorn添加到apps中 ] 配置脚本文件启动django项目: # gunicorn_con

    2024年02月09日
    浏览(50)
  • 关于设置静态IPV4静态地址后ipconfig/all发现IPV4首先是169开头的IP

     解决办法一: 出现这种情况一般是IP地址冲突,换一个IP地址。 解决办法二: 1、windows+R 输入cmd进入命令行。 2、输入  netsh winsock reset 后回车 , 稍后,会有成功的提示:成功地重置Winsock目录→重启计算机完成重置。 3、之后输入 netshintIPreset.log (按回车键执行命令) 4、之

    2024年04月25日
    浏览(34)
  • Django静态文件&媒体文件&文件上传

    创建一个新项目 Day06DjangoPro01 每一个应用中都可以新建一个static和templates 如果想要额外再加一些静态文件路径,就再加一个STATICFILES_DIRS Apptemplatesindex.html 一般用 link rel=\\\"stylesheet\\\" href=\\\"{% static \\\'css/index.css\\\' %}\\\" Appstaticcssindex.css 根路由 Day06DjangoPro01urls.py Appviews.py 在项目根目录

    2024年02月10日
    浏览(107)
  • Django后端开发——静态文件

    B站网课:点击蓝色字体跳转 或者复制网址在浏览器访问:https://www.bilibili.com/video/BV1vK4y1o7jH?p=13vd_source=597e21cf34ffcdce468ba00be2177e8a 如:图片、css、js、音频、视频 以下一行代码是手动添加的,指定了一个目录——‘static’,将在该目录下查找静态文件 模板中访问静态文件 - im

    2024年02月19日
    浏览(129)
  • Django 静态自定义化配置

    STATIC TEMPLATES 一般 Django 默认的 TEMPLATES 配置为:         注: BACKEND : 指定模板引擎(一般不需改动)。 APP_DIRS : 一个布尔值,指示是否在每个已安装的应用程序的  templates  子目录中查找模板。在这个例子中,它被设置为  True ,这意味着 Django 会在每个应用程序的  templ

    2024年02月07日
    浏览(38)
  • Django_静态资源配置和ajax(九)

    目录 一、静态资源配置  二、AJAX ajax作用 使用ajax 1、环境配置  2、创建html模板文件 3、编写视图函数并添加路由 4、运行django开发服务器进行验证 源码等资料获取方法 静态资源的相关配置都在项目目录下的 settings.py 文件中进行配置。配置参数如下:  注意:django查找静态

    2024年02月15日
    浏览(39)
  • 你所不了解的静态路由特点及配置分析

     许多读者朋友错误地认为静态路由很简单,就一个命令,没什么好学的。其实这是因为他们根本没有深入理解静态路由的工作原理,对于仅有一条静态路由配置命令中的各参数和选项的含义和使用方法也是一知半解,结果造成的是遇到一些静态路由故障时无法进行分析,而

    2024年02月06日
    浏览(34)
  • 标题:深入了解静态路由和DHCP:网络配置的利器 静态路由配置和路由器上配置DHCP、虚拟局域网VLAN

    引言: 静态路由和DHCP(动态主机配置协议)是网络配置中至关重要的两项技术。静态路由允许管理员手动配置网络路由,实现数据包在网络中的精确传输;而DHCP则可以为网络中的设备自动分配IP地址,简化设备接入过程。本文将深入探讨这两项技术的工作原理、配置方法以

    2024年02月02日
    浏览(48)
  • Django - 页面静态化基本使用(一)

    一个网页会有很多数据是不需要经常变动的,比如说首页,变动频率低而访问量大,我们可以把它静态化,这样就不需要每次有请求都要查询数据库再返回,可以减少服务器压力 我们可以使用Django的模板渲染功能完成页面渲染 所谓页面静态化, 就是提前渲染出完整的html页面

    2024年02月08日
    浏览(23)
  • 惊~只需要这样配置就可以让小程序使用Prettier格式化,还支持wxml等文件

    安装Prettier 首先找到扩展商店的入口 入口1:设置 → 扩展设置 → 编辑器扩展 → prettier 入口2:打开编辑器面板 → 找到小方块(扩展商店)→ 搜索prettier 配置基础的规则 安装好后,就可以在设置中找到该插件了,然后进行设置,直接点击右上角的格式化配置文件 setting.js

    2024年02月09日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包