
因为微信的图片有防盗链机制,复制粘贴文章每次图片都要重新传,感觉很麻烦,就想覆写下 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 中有很多&... |