我的用例是:
我在某些视图中使用某个url qrcode生成,然后我在模板中使用它,如下所示:
<img src="/qrcode/2">
我知道holder.js,我希望显示如下内容:
<img src="holder.js/200x200/text:qrcode not avaliable">
当没有加载qrcode图像时因为任何事情(比如坏ID,PIL库的soem崩溃......)。
什么是最干净的解决方案?
我正在努力寻找:
return HttpResponse("holder.js/200x200/text:qrcode not avaliable", content_type="image/png")
也将mime类型设置为text,但它不会替换img标记中的源src。
更新:
我想了一会儿,我开始害怕,我正在尝试重新发明轮子......所以我决定在视图中传递适当的网址来渲染页面:
def certificate(request, pk):
try:
spot = Spot.objects.get(pk=pk)
if request.method == 'GET':
link = '/qrcode/%d' % int(pk)
return render(
request,
'certificate.html',
{'spot': spot, 'qrcode_link': link})
except:
return render(
request,
'certificate.html',
{'spot': None,
'qrcode_link': 'holder.js/200x200/text:qrcode not avaliable'})
在模板中我只是:<img src="{{qrcode_link}}">
但问题仍然是开放的,所有想法,如何做得更好将受到关注: - )
答案 0 :(得分:0)
我认为您的第二种方法最有意义,但您不必在代码中包含Holder URL。 Holder 2.4包含404后备,因此任何无法加载的图像都会显示为占位符。您可以像这样使用它:
<img data-src="holder.js/200x200/text:QR Code Unavailable" src="/qrcode/123">
如果找不到/qrcode/123
的图片或无法加载,则会显示占位符。