2011-01-31 34 views
129

我用的是「消息」界面將消息傳遞給用戶這樣的:渲染一個模板變量作爲HTML

request.user.message_set.create(message=message) 

我想包括我{{ message }}變量html和渲染它沒有在避開標記模板。

回答

21

你可以在你的代碼呈現一個模板,像這樣:

from django.template import Context, Template 
t = Template('This is your <span>{{ message }}</span>.') 

c = Context({'message': 'Your message'}) 
html = t.render(c) 

進一步信息,請參見Django docs

+0

我覺得我得到了棍子的錯誤結束了,但我離開了答案現在。 –

27

使用autoescape打開HTML轉關:

{% autoescape off %}{{ message }}{% endautoescape %} 
+0

我認爲我們必須提供'{%endautoescape%}'而不是'autoescape on'。它顯示一個錯誤,如果我們不關閉 – Surya

+0

@Surya:哎呀,修正了。 – mipadi

20

如果你想對文本做更復雜的事情,你可以創建自己的過濾器並在返回html之前做一些魔術。 隨着templatag文件看起來像這樣:

from django import template 
from django.utils.safestring import mark_safe 

register = template.Library() 

@register.filter 
def do_something(title, content): 

    something = '<h1>%s</h1><p>%s</p>' % (title, content) 
    return mark_safe(something) 

然後,你可以在你的模板文件

<body> 
... 
    {{ title|do_something:content }} 
... 
</body> 

添加這和這會給你一個不錯的結果。