我希望从我的一个视图中返回静态文件的内容作为(有时)HttpResponse。
在Django中有一种简单的方法吗?
答案 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
请求的回复:
:
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")
会做诀窍吗?或者我误解了你的问题