Django 从视图中提供图片

0 投票
1 回答
1800 浏览
提问于 2025-04-18 11:54

我正在尝试在Django的一个视图中显示一张透明的图片。

这是HTML代码 -

// other html stuff
< img src="{% url 'minor_url_test' }" alt="Smiley face"  height="1" width="1">
// other html stuff

urls.py 文件 -

url(r'^minor_image_url/$', 'minor_url_test', name='minor_url_test')

views.py 文件 -

def minor_url_test(request):
    TRANSPARENT_1_PIXEL_GIF = "\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\xff\xff\xff\x00\x00\x00\x21\xf9\x04\x01\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02\x44\x01\x00\x3b"

    import ipdb
    ipdb.set_trace()
    return HttpResponse(TRANSPARENT_1_PIXEL_GIF, content_type='image/gif')

我从一个不同的视图中提供这个HTML文件,所有的HTML内容都能正常显示,但图片却不行。而且 minor_url_test 这个视图根本没有被调用。

我哪里做错了呢?

1 个回答

0

你发的代码看起来没什么大问题,不过有几个小地方需要注意:

  • <img之间不要加空格。正确的写法是:<img ...>
  • 图片文件的名字后面应该有合适的后缀。比如,网址应该是:minor_image_url.gif,不过现在大部分现代浏览器对此并不太在意。
  • 视图(view)可能没有正确导入。你需要提供完整的路径,比如my_app.views.minor_url_test。不过我更喜欢这样导入视图:

代码

from my_app import views
urlpatterns = patterns('',
    # ...
    url(r'^minor_image_url/$', views.minor_url_test, name='minor_url_test'),
)

这样做的好处是,如果视图不存在或者找不到,控制台会打印出错误信息。

如果我的建议都没有帮到你,请你再完善一下你的问题:

  • 展示一下网页浏览器获取的HTML代码。几乎所有浏览器都有“查看源代码”或“检查源代码”的选项。浏览器获取的代码应该是<img src="/minor_image_url/" alt="Smiley face" height="1" width="1">
  • 重启一下网络服务器(在Linux/Mac上按ctrl + C,然后输入./manage runserver),访问包含IMG标签的网页(就这个网页),并把完整的控制台输出发出来。
  • 手动访问http://your_server/minor_image_url/。如果出现了Django错误页面,这会帮助你解决问题。如果你看不懂错误信息,可以把它发出来。同时确保你的浏览器能够显示图片(比如,Firefox会用灰色背景显示图片,而不是空白页面。这样你就能确认你正在处理的是图片,而不是空白页面)。

撰写回答