html中imagefield做成链接,django中重写Storage中的url函数实现自动给mysql的Image属性链接增加域名出现{{ no such element: django.db.m...

1.根据课件上的教材重写Storage的url函数,方法如下:

from django.core.files.storage import Storage

from django.conf import settings

class FastDFSStorage(Storage):

"""自定义文件存储类"""

def __init__(self, fdfs_base_url=None):

"""文件存储类的初始化方法"""

# if not fdfs_base_url:

# self.fdfs_base_url = settings.FDFS_BASE_URL

# self.fdfs_base_url = fdfs_base_url

self.fdfs_base_url = fdfs_base_url or settings.FDFS_BASE_URL

def _open(self, name, mode='rb'):

"""

打开文件时会被调用的:文档告诉我必须重写

:param name: 文件路径

:param mode: 文件打开方式

:return: None

"""

# 因为当前不是去打开某个文件,所以这个方法目前无用,但是又必须重写,所以pass

pass

def _save(self, name, content):

"""

PS:将来后台管理系统中,需要在这个方法中实现文件上传到FastDFS服务器

保存文件时会被调用的:文档告诉我必须重写

:param name: 文件路径

:param content: 文件二进制内容

:return: None

"""

# 因为当前不是去保存文件,所以这个方法目前无用,但是又必须重写,所以pass

pass

def url(self, name):

"""

返回文件的全路径

:param name: 文件相对路径

:return: 文件的全路径(http://fastdfs所在服务器域名/group1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpeg) """   # return "fastdfs所在服务器域名" + name   return self.fdfs_base_url + name

setting文件中增加:

DEFAULT_FILE_STORAGE = 'meiduo_mall.utils.fastdfs.fdfs_storage.FastDFSStorage'

# FastDFS相关参数

FDFS_BASE_URL = fastdfs所在服务器域名

根据视频和课件,老师都能通过,jinja2模板引擎调用url方法,给image属性中的链接增加域名

但自己试了很多次就是不行,

出现如下错误:

bfc0d80159019b71bd0c05baf9e84d04.png

分析原因可能是因为,django在启动时为调用重写的Storage方法,无法查明为什么没有调用.

在查找过程中发现,django其实已经封装了给image属性的链接增加域名的方法,如下:

方法为继承了Storage方法的FileSystemStorage方法:

FileSystemStorage中的url函数:

5c2d6e583d5b52134b60b78c06318659.png

如下图base_url为如下函数:函数实现若_base_url存在则返回_base_url的值,若不存在则返回setting里的默认域名settings.MEDIA_URL

64929639f62ba6db8706ae2d21a5973d.png

而_base_url则为init方法中动态传入的域名

35ad3a51e056972bf3d404f24795f5d0.png

filepath_to_uri这用于判断image属性的链接是否为空,不为空则返回原来的值

0b9eedcddfb05624c1c687063fe09598.png

最后使用urljoin方法拼接域名和链接,返回完整的链接

所以如果需要在连接前添加域名,不需要重新定义Storage的url函数(况且我重新定义了还出错,弄了很久极其郁闷)

只需要在配置文件中加入一行代码即可实现:

MEDIA_URL = 'http://域名:8888/'

940cd1386bc7783a9aaad72d74d593cb.png

5a9d8910e141f7bb2e0613d011ef100f.png

来源:https://www.cnblogs.com/sewen-H/p/13364152.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值