2013-06-28 133 views
2

我有一個情況怎麼樣,我取出由DB一些HTML是這樣這是一個變量HTML店,渲染到模板,並得到迴應

{{HEADER}} </br> 
Hello {{NAME}}, </br> 
{{FOOTER}} 

正如你可以看到我有以這樣的方式定義數據,使得變量(HEADER,FOOTER等)可以是由有實際值更換時我呈現此任何模板。 但是這沒有發生。 我做了一個模板abc.html在我的渲染,而這個模板的內容{{HTML}},這是由上面的代碼替換當我渲染到這個模板。

我曾經嘗試這樣做 -

html_content =TemplateResponse(request,"abc.html",{'html':html,'HEADER':html_header,'FOOTER':html_footer}) 
html_content.render() 

現在的問題是,在abc.html只有HTML是由它的值替換,但變數像HEADER HTML定義,頁腳不是由它的內容替換。

我知道這是複雜的東西,可能是不可能的。

但任何一個可以建議我一些方法,讓我可以在模板改變變量

+0

你嘗試'mark_safe' html的變量? – matino

+0

你的html變量是否包含這個值? {{HEADER}}
您好{{NAME}},
{{頁腳}} – Sudipta

+0

@matino NO,我沒試過 – Inforian

回答

1

是的,這是因爲最終的HTML模板被渲染一次。在渲染abc.html時,它會查找所有模板變量並將其替換。在這種情況下,只有'html'被其值取代。然後HTML被呈現,因爲它沒有找到任何其他變量或包含的HTML。

如果你逝去的另一模板變量中的模板變量,那麼它不會呈現。

你可以做這樣的事情:

#abc.html 
{{HEADER}} 
{{ CONTENT }} 
{{FOOTER}} 

#in view 
html_content =TemplateResponse(request,"abc.html {'CONTENT':html_content,'HEADER':html_header,'FOOTER':html_footer}) 

爲此,您需要在HTML的數據庫中的格式更改。

但正如你所說,你的情況可以有很多模板變量除了頁眉和頁腳,那麼你就可以在發送用於渲染之前更新「HTML」變量。

finalhtml = html.replace('{{HEADER}}',html_header).replace('{{FOOTER}}',html_footer) 
html_content =TemplateResponse(request,"abc.html {'html':finalhtml}) 

或者你可以使用:

from django.template import Context, Template 
t = Template(html) 
c = Context({'HEADER':html_header,'FOOTER':html_footer}) 
return HttpResponse(t.render(c)) 

我猜這個人是做最徹底的方法;即從字符串而不是文件加載模板。 See documentation here

+0

感謝您的回覆,您建議的方式對我無效,因爲在Html中,我可以定義更多變量,然後只是標題和頁腳。 – Inforian

+0

好的。然後在發送'html'變量進行渲染之前使用replace()函數。 'finalhtml = html.replace('{{HEADER}}',html_header)。替換('{{FOOTER}}',html_footer)' – Sudipta

+0

我也在考慮使用相同的東西 – Inforian