在django模板中使用jsholder处理未生成的图像的最佳方法

时间:2014-07-20 20:38:23

标签: django django-templates holder.js

我的用例是:

我在某些视图中使用某个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}}">

但问题仍然是开放的,所有想法,如何做得更好将受到关注: - )

1 个答案:

答案 0 :(得分:0)

我认为您的第二种方法最有意义,但您不必在代码中包含Holder URL。 Holder 2.4包含404后备,因此任何无法加载的图像都会显示为占位符。您可以像这样使用它:

<img data-src="holder.js/200x200/text:QR Code Unavailable" src="/qrcode/123">

如果找不到/qrcode/123的图片或无法加载,则会显示占位符。