因为微信的图片有防盗链机制,复制粘贴文章每次图片都要重新传,感觉很麻烦,就想覆写下 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','')
有点懵了,还请各位指点一下
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.