有没有办法在没有视图模型的情况下呈现html页面?

时间:2010-05-09 22:34:04

标签: django

如果页面只显示静态html,有没有办法在django中没有视图模型的情况下呈现html页面?

另外,我可以重定向到html页面而不是网址吗?例如,而不是这样做:

return HttpResponseRedirect('form/success/')

我可以这样做:

return HttpResponseRedirect('success.html')

5 个答案:

答案 0 :(得分:19)

您可以使用通用视图direct_to_template呈现没有视图的模板。

重定向到success.html不是django的方法,因为success.html没有关联的URL。你总是必须通过一个视图将模板绑定到一个url(direct_to_template是一个从urls.py中的conf获取所有参数的视图,但它仍然是一个视图)

答案 1 :(得分:18)

direct_to_template在Django 1.8中不再有效。以下是如何在1.8中的 urls.py

中执行此操作
from django.views.generic import TemplateView

urlpatterns = [
    url(r'^$', TemplateView.as_view(template_name="your_static.html"), name='whatever'),
]

答案 2 :(得分:15)

对于静态HTML,您可以使用Flatpages app

您还可以提供呈现的模板(可能只包含静态HTML),但您需要一个视图:

from django.shortcuts import render_to_response
def some_view(request):
   return render_to_response('sometemplate.html')

关于重定向,基本上你不能通过提供文件名重定向到HTML页面,即使它是由Web服务器静态提供的,你仍然会使用指向该文件的URL。

答案 3 :(得分:2)

我非常确定这不是OP想要做的事情,但如果有人想要在没有视图的情况下渲染某些内容(用于发送电子邮件或附加其他HTML代码),则可以使用此功能:

from django.template.loader import render_to_string
html = render_to_string('template.html', params)

答案 4 :(得分:1)

使用lambda函数。

urlpatterns = [
    path('', lambda request: render(request, 'homepage.html'))
]