因为微信的图片有防盗链机制,复制粘贴文章每次图片都要重新传,感觉很麻烦,就想覆写下 django admin 的 save_model 方法,打算把复制来的文章的图片存到本地,如下
def save_model(self, request, obj, form, change):
b = etree.HTML(obj.content)
pics = b.xpath("//*/@src")
for pic in pics:
c = pic.split("&")[0].split("=")
if c[1] == "jpeg" or c[1] == "png" or c[1] == "jpg":
img_url = pic.split("&")[0]
image_name = img_url.replace("https://","").split("/")[2]
new_name = settings.MEDIA_ROOT+"/"+image_name+"."+c[1]
file_name = settings.MEDIA_URL+image_name+"."+c[1]
response = requests.get(img_url)
image = Image.open(BytesIO(response.content))
image.save(new_name)
obj.content = obj.content.replace(str(pic),str(file_name))
print(pic)
super(NewsAdmin,self).save_model(request, obj, form, change)
问题就出现在这句
obj.content = obj.content.replace(str(pic),str(file_name))
想要把 富文本编辑内的原图片 url 替换成 新生成的 url 原地址也是通过 xpath 取出来的 所以应该是没有问题的 但是 replace 就是一直匹配不到原 url 即使加了去掉换行符,依旧匹配不到
obj.content = obj.content.replace('\r','').replace('\n','').replace('\t','')
有点懵了,还请各位指点一下
1
chengxiao OP 找到问题了.....原 url 中有很多&...
|