1

我的用例是:

我在某些视图中生成具有某些 url qrcode,然后我在模板中使用它,如下所示:

<img src="/qrcode/2">

我知道 holder.js,我想显示如下内容:

<img src="holder.js/200x200/text:qrcode not avaliable">

当由于任何原因(例如错误的 id、PIL 库的 soem 崩溃...)而未加载 qrcode 图像时。

什么是最干净的解决方案?

我正在尝试查看:

return HttpResponse("holder.js/200x200/text:qrcode not avaliable", content_type="image/png")

也将 mime 类型设置为文本,但它不会替换 img 标记中的源 src。

更新:

我想了一会儿,我开始害怕,我正在尝试重新发明轮子......所以我决定在视图呈现页面时传递适当的 url:

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}}">

但是这个问题仍然是开放的,所有的想法,如何做得更好都会被理解:-)

4

1 回答 1

0

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

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

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

于 2014-07-20T23:31:53.623 回答