【问题标题】:Responding with a static file in viewer在查看器中响应静态文件
【发布时间】:2011-10-14 21:49:07
【问题描述】:

我正在使用 Apache+wsgi_mod 开发一个 django 应用程序。我定义了一个简单的 viewer 返回用户的图像。但如果用户没有任何图片,我想渲染一个静态标准图像(取决于性别),存储在我的 static 文件夹中。我知道我可以使用 static.serve() 但 django 文档阻止了这一点。 如何从查看器中提供静态文件?

更新:

viewer是views.py中定义的方法(例如下面的img)

我可能想将 HttpResponseRedirect() 返回到我的静态内容。但是我需要绝对 URL。

我需要这个,因为我有类似的东西:

def img(request, usr_id):
    usr_image = get_usr_image(usr_id)
    if usr_image == None:
        return respond_with_standard_image()
    else:
        response = HttpResponse(mimetype='image/jpg')
        response.write(usr_image)
        return response

并希望使用标准用户图像进行响应。

更新2:

我可以这样做:

return HttpResponseRedirect('http://' + request.get_host() + settings.STATIC_URL + 'img/125px-Silver_-_male.png')

但我不满意。

【问题讨论】:

  • 什么?什么是“观众”?为什么从那里提供静态图像与提供标准 CSS/JS/图像有什么不同?

标签: django django-views django-staticfiles


【解决方案1】:

Django 不应该参与渲染图像或任何其他静态文件。您应该将您的用户图像放在一个自定义目录中,并直接通过您的网络服务器提供它。

如果原始文件不存在,则可以通过重写规则轻松实现渲染不同的图像。

【讨论】:

  • 嗯,你是对的。但它在我的情况下不起作用。我正在使用特殊的 api 通过其他层从数据库中获取这些图像,所以我必须涉及 django。
  • 我不明白。在您的示例和第二次更新中,您不会从数据库中提供任何图像,因为您正在进行重定向。哪些数据来自您的数据库?
  • 只有真实图片来自db。其他(匿名、标准)图像我将自己放入 static/ 文件夹,所以我可以进行重定向。
  • 那么,你只有两种可能。您可以从您的视图中提供静态文件,这很丑陋但可以避免重定向。或者你做重定向,并用 apache 服务它。无论如何,在数据库中存储文件是丑陋的。
  • 我知道这很丑,但我必须适应。我将尝试在 404 的情况下使用模板内的 ajax 加载这些图像。
猜你喜欢
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-13
  • 2019-02-02
相关资源
最近更新 更多