1

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

在 Django 中是否有一种简单的方法可以做到这一点?

4

4 回答 4

3

如果视图有时会使用模板或任何其他计算进行某些操作,那么最好的方法是在您需要返回静态对象时确定“有时”,然后发出临时重定向到该静态 url - 然后离开为您的静态内容提供服务的服务器负责交付内容。

更新

由于我有一段时间没有使用 Django,只是一般地使用 Web 开发等......我被告知 1.3+ 的 Django 包含一个(看起来像)非常简单的重定向机制。(反正比我记得的要简单!)

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

于 2012-06-21T16:25:09.840 回答
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
于 2012-06-21T16:29:27.020 回答
1

除了其他人所展示的之外,还有一种方法有时用于返回对以下请求的响应robots.txt

  • 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()
    
  • robots.txt模板中的文件中,您实际上可以拥有静态内容(或您喜欢的任何内容)。

但总的来说,其他人是对的:如果您提供静态内容,请将其作为静态内容提供,如果不需要,请不要使用 Django 处理此文件。

于 2012-06-21T16:34:19.580 回答
0
 return HttpResponse("any content") 

会做伎俩吗?或者我误解了你的问题

于 2012-06-21T16:22:42.897 回答