2010-05-09 80 views
13

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

此外,我可以重定向到一个HTML页面,而不是一个网址?例如,而不是这样做:

return HttpResponseRedirect('form/success/') 

我可以这样做:

return HttpResponseRedirect('success.html') 

回答

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。

18

您可以使用通用视图direct_to_template呈现不带视图的模板。

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

+13

'direct_to_template'已被弃用;请参阅[此问题](http://stackoverflow.com/a/15117932/662761)for 1.5+ – Jack 2013-12-12 02:01:03

+0

该链接现在也被破坏。 – 2017-03-02 18:31:50

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'), 
] 
+0

适用于1.8及更高版本。 – shadow0359 2016-12-05 11:14:53

+0

我们需要为每个静态HTML做到这一点吗? – Anupam 2017-01-27 10:22:35

+0

@AnupamJain是的, – Cheng 2017-01-28 14:04:29

1

我敢肯定这不是OP想做的事,但如果有人想呈现的东西,不设窗户, (用于发送电子邮件或附加到其他html代码),您可以使用:

from django.template.loader import render_to_string 
html = render_to_string('template.html', params) 
相关问题