我可以直接作为来自视图的Http响应提供静态文件的内容吗?

时间:2012-06-21 16:21:22

标签: python django

我希望从我的一个视图中返回静态文件的内容作为(有时)HttpResponse。

在Django中有一种简单的方法吗?

4 个答案:

答案 0 :(得分:3)

如果视图有时会使用模板或任何其他计算,那么最好的方法是在需要返回静态对象时决定“有时”,然后发出临时重定向到该静态URL - 这然后让服务于静态内容的服务器承担提供内容的工作。

<强>更新

由于我有一段时间没有使用Django,只是一般的web开发等...我被告知来自1.3+的Django包含一个(看起来很像)非常容易的重定向机制。 (比我想象的更简单!)

https://docs.djangoproject.com/en/dev/topics/class-based-views/ 由Tadeck提供

答案 1 :(得分:2)

我真的很喜欢Jon Clement的想法。虽然如果你需要,这就是你提供文件的方式:

def view(request):
    with open(path) as file:
        response = HttpResponse(file.read(), content_type='application/pdf')
        response['Content-Disposition'] = 'attachment; filename=filename.pdf'
        return response

答案 2 :(得分:1)

除了其他人展示的内容之外,还有一种方法可以用来返回robots.txt请求的回复:

    <{1}}中的
  • views.py
  • 当您需要视图时(例如,在from django.views.generic import TemplateView class RobotsTxtView(TemplateView): """A class-based view for responding to requests for robots.txt file """ template_name = 'robots.txt' def render_to_response(self, context, **kwargs): """Overwritten render_to_response for applying text/html mimetype """ return super(RobotsTxtView, self).render_to_response(context, content_type='text/plain', **kwargs) 内或尝试生成实际视图时),请使用:

    urls.py
  • 在模板的from myapp.views import RobotsTxtView robots_view = RobotsTxtView.as_view() 文件中,您实际上可以拥有静态内容(或任何您喜欢的内容)。

但总的来说其他人是正确的:如果你正在提供静态内容,请将其作为静态内容提供,如果你不需要,请不要使用Django来处理这个文件。

答案 3 :(得分:0)

 return HttpResponse("any content") 

会做诀窍吗?或者我误解了你的问题