2015-05-29 26 views
1

我正在爲法語應用程序編寫定製Django模板標記。我的模板標籤需要一個參數是一個字符串:模板標記值中的Django非ASCII字符

{% mytag "Hello" %} 

是完美的作品,而是試圖把一些非ASCII字符的值時失敗。

你將如何讓這件事的工作:

{% mytag "Êtes-vous à Paris ?" %} 

我得到這個錯誤:

'ascii' codec can't encode character u'\xca' in position 0: ordinal not in range(128)

Unicode error hint

The string that could not be encoded/decoded was: Êtes-v

提前感謝非常感謝!

編輯: Python版本是2.7。下面是標籤的代碼:

@register.simple_tag(takes_context=True) 
def mytag(context, my_var): 
    return "Here it is: {my_var}".format(my_var=my_var) 
+0

哪個python版本?你能告訴我們標籤的代碼嗎? – Wtower

+0

看看是否有幫助http://stackoverflow.com/a/13986802/2445183 – itzhaki

+0

Python版本是2.7。在初始文章中添加標籤代碼。感謝您的幫助... – user650108

回答

1

嘗試更換

return "Here it is: {my_var}".format(my_var=my_var) 

通過

return u"Here it is: {my_var}".format(my_var=my_var) 

在Python 2.7,"Here it is: {my_var}"str對象,編碼的字符串,my_varunicode對象,一個解碼的字符串,當格式化時,Python會嘗試編碼my_var,以便它匹配格式化字符串的類型。它默認使用ascii編解碼器,它不支持特殊字符。

在格式化字符串使其成爲unicode字符串之前添加u,在格式化期間不會進行編碼。

由於看起來你會說法語,所以我建議你閱讀this article這是一本很好的Python編碼指南。