2010-06-14 45 views
1

我的重音字符有問題。 Django管理員保存我的數據,而不編碼爲「áKeyError與Django,可交易的應用程序和重音字符?

例如:如果我試圖使用像「

我在我的地點:DEFAULT_CHARSET = 'utf-8'

我在我的mysql數據庫:utf8_general_ci

我使用社交場所應用:

{% load sociable_tags %} 

{% get_sociable Facebook TwitThis Google MySpace del.icio.us YahooBuzz Live as sociable_links with url=object.get_absolute_url title=object.titulo %} 
{% for link in sociable_links %} 
    <a href="{{ link.link }}"><img alt="{{ link.site }}" title="{{ link.site }}" src="{{ link.image }}" /></a> 
{% endfor %} 

但我發現瞭如果有錯誤我的object.titulo(文章標題)有一個重音詞。

Traceback: 
File "C:\wamp\bin\Python26\lib\site-packages\django\core\handlers\base.py" in get_response 
    100.      response = callback(request, *callback_args, **callback_kwargs) 
File "C:\wamp\bin\Python26\lib\site-packages\django\views\generic\date_based.py" in object_detail 
    366.  response = HttpResponse(t.render(c), mimetype=mimetype) 
File "C:\wamp\bin\Python26\lib\site-packages\django\template\__init__.py" in render 
    173.    return self._render(context) 
File "C:\wamp\bin\Python26\lib\site-packages\django\template\__init__.py" in _render 
    167.   return self.nodelist.render(context) 
File "C:\wamp\bin\Python26\lib\site-packages\django\template\__init__.py" in render 
    796.     bits.append(self.render_node(node, context)) 
File "C:\wamp\bin\Python26\lib\site-packages\django\template\debug.py" in render_node 
    72.    result = node.render(context) 
File "C:\wamp\bin\Python26\lib\site-packages\django\template\loader_tags.py" in render 
    125.   return compiled_parent._render(context) 
File "C:\wamp\bin\Python26\lib\site-packages\django\template\__init__.py" in _render 
    167.   return self.nodelist.render(context) 
File "C:\wamp\bin\Python26\lib\site-packages\django\template\__init__.py" in render 
    796.     bits.append(self.render_node(node, context)) 
File "C:\wamp\bin\Python26\lib\site-packages\django\template\debug.py" in render_node 
    72.    result = node.render(context) 
File "C:\wamp\bin\Python26\lib\site-packages\django\template\loader_tags.py" in render 
    62.    result = block.nodelist.render(context) 
File "C:\wamp\bin\Python26\lib\site-packages\django\template\__init__.py" in render 
    796.     bits.append(self.render_node(node, context)) 
File "C:\wamp\bin\Python26\lib\site-packages\django\template\debug.py" in render_node 
    72.    result = node.render(context) 
File "C:\wamp\bin\Python26\lib\site-packages\sociable\templatetags\sociable_tags.py" in render 
    37.     'link': sociable.genlink(site, **self.values), 
File "C:\wamp\bin\Python26\lib\site-packages\sociable\sociable.py" in genlink 
    20.   values['title'] = quote_plus(kwargs['title']) 
File "C:\wamp\bin\Python26\lib\urllib.py" in quote_plus 
    1228.   s = quote(s, safe + ' ') 
File "C:\wamp\bin\Python26\lib\urllib.py" in quote 
    1222.  res = map(safe_map.__getitem__, s) 

Exception Type: TemplateSyntaxError at /noticia/2010/jun/10/matan-domingo-paquete-en-la-avenida-san-vicente-de-paul/ 
Exception Value: Caught KeyError while rendering: u'\xfa' 

謝謝!

+1

需要整個回溯,所以我們可以看到問題出在哪裏。 – 2010-06-14 03:07:22

+0

當然,但錯誤是與鹽水重音字 – Asinox 2010-06-14 19:45:33

回答

4

問題是社交是使用python 2.6的默認urllib.quote_plus實現,它不是unicode-safe。他們應該使用django的django.utils.http.urlquote_plus,其中 unicode-safe。

要回答你的問題的其他部分,如果你真的想在數據庫中存儲轉義字符串(我不建議這樣做),你可以調用一個方法在模型的save方法中進行轉義。不過,我沒有知道內置的python或django實用程序來執行unicode-to-html-entity轉義。但是,快速的谷歌搜索會出現幾個。不過,我不建議這樣做。 Django是Unicode安全的,最好利用這個事實!

1

這是一個在django-sociable本身的錯誤,因此它錯誤地處理了unicode。我建議reporting this bug,然後與開發人員一起修復。

+0

同意。針對具體問題並修復看到我的答案。 – 2010-06-14 19:59:44

+0

感謝加布裏埃爾赫利,我從社交應用中修復社交文件 – Asinox 2010-06-14 20:14:09

+0

我實際上爲自己打開了一張票,請參閱:http://bitbucket.org/kmike/django-sociable/issue/1/gen_link-function-isnt -unicode安全 – 2010-06-14 20:15:51