2013-04-17 23 views
2

我有一個模型,「事件」,具有以下屬性:如何阻止Django模板render_to_string嘗試將unicode編碼爲ascii?

desc = models.TextField(blank=True, null=True) 

當模型的實例保存,它似乎特殊字符轉換爲Unicode,例如左雙引號變爲「 \ u201c」。後來,我在模板中引用了{{event.desc}}(工作正常),但是當我將模板呈現給字符串時,我得到一個「UnicodeEncodeError」。對於上下文,我試圖將一個簡單的HTML呈現爲一個字符串發佈到API。

如何呈現模板:

description = render_to_string('event_description.html', {'event': self}) 

和所產生的誤差:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u201c' in position 845: ordinal not in range(128) 

有沒有一種方法,以防止編碼render_to_string爲ascii,或者一些更合適的方式來防止這種錯誤?

回答

3

聽起來像有一個.encode()試圖編碼u'\u201c' ascii和失敗的地方。
您可以檢查回溯以找到該行並將其更改爲明確的.encode('utf8')
或者將您的Python系統的默認編碼更改爲'utf-8':ref here & here

1

嘗試使用在你看來:

# -*- coding: utf-8 -*- 

問候,

+1

這贏得了」這是通過創建名爲'nome_servidor'背景下的新參數,並明確事先編碼它解決解決問題。這設置了python源代碼的編碼,並且完全不影響模板。 –

0

這非常相同的問題只是發生在我身上;我得到這個錯誤:

'ascii' codec can't encode character u'\xf5' in position 14: ordinal not in range(128) 
(...) 
Error during template rendering 
(...) 
<h1 id="site-name">{{ servidor }}</h1> 

在我而言,這可能是也可能不是你的一樣(沒有足夠的細節上的問題是一定的那個),是'servidor'是一個東西; Django試圖將其轉換爲字符串,但使用了錯誤的編碼;

context = { 
    'nome_servidor': unicode(servidor), 
    'servidor': servidor, 
    'logs' : servidor.lista_logs() 
} 

然後更改模板明確地使用編碼的字符串:

<h1 id="site-name">{{ nome_servidor }}</h1>