在使用Django加载图片时遇到了一些问题,在模板html文件中无论使用绝对路径还是当前相对路径都无法找到图片,一直报403和404的错误,后来结合官网和网上的其他资料总算是成功了,这里记下来。

参考网址:
Django将图片,JS,CSS等文件称作静态文件,如果你要在模板中引用这些静态文件,你必须设置static_url或者static_root。
1.修改settings.py文件,添加如下内容:
# Static files (CSS, JavaScript, Images)
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static")
]

STATIC_URL的意思是将静态文件的http可访问路径设为/static/,而STATICFILES_DIRS则是真正存储静态文件的目录,你可以通过STATICFILES_DIRS添加多个静态文件存储目录。

2.修改模板中对于图片的引用路径:

{% load static %}
<img src="{% static "1.png" %}" alt="Leo头像" height=100 width=100 />

Django在查找图片时会默认的使用static()方法(前提是你INSTALLED_APPS里包含django.contrib.staticfiles)到你给定的STATICFILES_DIRS目录下寻找静态文件,这种load写法是官网写法,比较推荐。

我们还可以在static下建每个app的静态文件存放路径,http访问时只要加上app名就好了,例如<img src="{% static "app_name/1.png" %}" alt="Leo头像" height=100 width=100 />

3.创建相应的目录,并将图片放置到此路径下:

mkdir -p /root/Django/mysite/static   --/root/Django/mysite/是我的project根目录(BASE_DIR)

这样就可以实现调用了,示例结果如下:

而且此时我们还可以通过以下URL直接访问此图片:(这就是STATIC_URL的功能,但要保证此路径下图片真实存在)

http://192.168.1.193:8000/static/1.png --8000是我的对外端口

关于STATIC_ROOT:

以上的static_url参数使用的是基于BASE_DIR的相对路径,但很多时候我们引用的静态文件并不一定能被允许放在BASE_DIR目录下,可能是有一个统一的存放路径存放的,因此django的static()方法也提供了另一种访问方式,即STATIC_ROOT参数(static()的第二个输入参数):

你需要在settings.py中在STATIC_URL下面添加上此参数,其值是静态文件存放的绝对路径。
使用此参数时建议执行下python manage.py collectstatic,作用是将你STATIC_URL和STATICFILES_DIRS下的所有app静态文件全部拷贝至STATIC_ROOT目录下,这样就方便其他服务统一引用了。
STATIC_ROOT和STATIC_URL虽然都可以让你的app访问静态文件,但他们的根本区别在于STATIC_ROOT和STATICFILES_DIRS一样都是存真实文件的,而STATIC_URL只是一个url,告诉你怎么访问这些文件,如果你不设置STATIC_ROOT和STATICFILES_DIRS,那么只有你使用第三方的web服务器时指定静态文件路径,静态文件才能被访问,例如uwsgi。
此外如果将默认的DEBUG=True参数改为False,那么STAIC_URL下的文件也将不可通过http直接访问了,除非你将路径直接加入urls.py。

关于MEDIA_URL和MEDIA_ROOT:

上边解释的STATIC相关参数适用于静态的文件,对于用户上传的可修改的媒体文件例如头像图片等,放在STATIC_URL中就不合适了,MEDIA_URL和MEDIA_ROOT这俩参数就是用于处理媒体文件存储的。

MEDIA_URL和MEDIA_ROOT的差别基本等同于STATIC_URL和STATIC_ROOT的差别。

目前发现有一点不一样的:即便设置了MEDIA_URL也不能直接通过http访问到媒体文件,还是需要将路径加入urls.py,这点需要注意。

更多的关于在正式开发中处理静态文件和媒体文件的信息,参考官方文档:

https://docs.djangoproject.com/en/2.1/howto/static-files/

https://docs.djangoproject.com/en/2.1/howto/static-files/deployment/

Django之--模板加载图片的更多相关文章

  1. django之创建第12个项目-加载图片

    百度云盘:django之创建第12个项目-加载图片 1.setting配置 #静态文件相关配置 # URL prefix for static files. # Example: "http ...

  2. vue动态加载图片,取消格式验证

    vue 一. 动态加载图片 (以vue模板为例) app.vue 代码如下: <template> <div id="app"> <img :src= ...

  3. Django中CSS加载background url('')问题

    Django中CSS加载background url('')问题   在django中, 默认CSS中如果有 background url('images/a.jpg') 这类的属性,会被django ...

  4. 【MFC】picture控件 两种有细微差别的动态加载图片方法

    摘自:http://www.jizhuomi.com/software/193.html VS2010/MFC编程入门之二十七(常用控件:图片控件Picture Control) 分类标签: 编程入门 ...

  5. CSS3学习总结——实现瀑布流布局与无限加载图片相册

    首先给大家看一下瀑布流布局与无限加载图片相册效果图: 一.pic1.html页面代码如下: <!DOCTYPE html> <html> <head> <me ...

  6. JQuery实现无刷新下拉加载图片

          最近做的一个项目需要做页面无刷新下拉加载图片,调研了一番,大多都采用检测滚动条达到底部,然后利用ajax加载下一页数据对页面数据进行添加,根据这一逻辑,自己写了一个,具体代码如下: JQu ...

  7. android 网络加载图片,对图片资源进行优化,并且实现内存双缓存 + 磁盘缓存

    经常会用到 网络文件 比如查看大图片数据 资源优化的问题,当然用开源的项目  Android-Universal-Image-Loader  或者 ignition 都是个很好的选择. 在这里把原来 ...

  8. ImageLoader加载图片

    先导universal-image-loader-1.9.3包 在application配置 android:name=".MyApplication" intent权限 1 pa ...

  9. chrome (failed) net::ERR_INCOMPLETE_CHUNKED_ENCODING ashx 加载图片

    chrome (failed) net::ERR_INCOMPLETE_CHUNKED_ENCODING   ashx文件加载图片的方法,发现在chrome浏览器里面出了异常: (failed) ne ...

随机推荐

  1. Git 撤销所有未提交(Commit)的内容

    撸了好多代码,但是突然设计改了(~~o(>_<)o ~~):或者引入个第三方库,后来又发现用不着,想删掉,但文件太多了(比如几百个):那,怎么办呢,都不想了...Git 比人聪明,所以能很 ...

  2. haproxy(8):haproxy代理MySQL要考虑的问题

    HaProxy系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html haproxy可以通过 TCP协议 来代理MySQL.但是两个问题必须考虑: ...

  3. Perl文件测试操作和stat函数

    在shell中通过test命令或者中括号[]可以进行文件测试以及其它类型的测试,例如判断文件是否存在,比较操作是否为真等等.perl作为更强大的文本处理语言,它也有文件测试类表达式,而且和shell的 ...

  4. Spring Cloud Stream消费失败后的处理策略(二):自定义错误处理逻辑

    应用场景 上一篇<Spring Cloud Stream消费失败后的处理策略(一):自动重试>介绍了默认就会生效的消息重试功能.对于一些因环境原因.网络抖动等不稳定因素引发的问题可以起到比 ...

  5. 【转载】Sqlserver中查询窗口显示行号

    在Sqlserver中编写语句的时候,有时候因为业务逻辑比较复杂,编写的语句会比较多,此时如果编辑器中显示代码的行号,则对于我们的语句编写有很好的辅助作用.sqlserver默认未开启行号显示功能,可 ...

  6. C#调用C++(QT5.5.1项目)的C++/CLI(CLR项目)项目技术笔记

    导航 1.编译环境 2.项目配置 1.设置附加包含目录 2.设置附加库目录 3.设置附加依赖项 3.CLR中各种定义 1.接口定义 2.类定义 3.枚举定义 4.属性定义 4.CLR中各种使用 1.类 ...

  7. 结构型---组合模式(Composite Pattern)

    组合模式的定义 组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户以一致的方式处理单个对象以及对象的组合. 组合模式实现的最关键的地方是——简单对象和复合对象必须实现相同的接口 ...

  8. 数据库部分(MySql)_4

    约束 约束:给表的字段名添加限制条件; 非空约束(not null):添加非空约束后,字段值不能为null: 唯一约束(unique):添加唯一约束后,字段值不能重复: 主键约束(primary ke ...

  9. 软件测试工程师这样面试,拿到offer的几率是80%

    面试难还是不难?取决于面试者的底蕴(气场+技能).心态和认知及沟通技巧.面试其实可以理解为一场聊天和谈判,在这过程中有心理.思想上的碰撞和博弈.其实你只需要搞清楚一个逻辑:“面试官为什么会这样问?他希 ...

  10. python同步、互斥锁、死锁

    目录 同步 同步的概念 解决线程同时修改全局变量的方式 互斥锁 使用互斥锁完成2个线程对同一个全局变量各加9999999 次的操作 上锁解锁过程 总结 死锁 避免死锁 同步 同步的概念 同步就是协同步 ...