2010-05-09 88 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) 
相關問題