我的重音字符有问题。 Django管理员将我的数据保存而不编码为“á
”
示例:如果我试图使用像“Canción”这样的单词,我希望以这种方式保存:Canción
,而不是Canción。
我在我的设置中:DEFAULT_CHARSET = 'utf-8'
我的mysql数据库中有utf8_general_ci
我正在使用Sociable app:
{% 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'
谢谢!
答案 0 :(得分:4)
问题是,sociable正在使用python 2.6的默认urllib.quote_plus
实现,这不是unicode安全的。他们应该使用django的django.utils.http.urlquote_plus
unicode-safe。
要回答问题的其他部分,如果您真的想在数据库中存储转义字符串(我不建议这样做),您可以调用一个在模型的save方法中进行转义的方法。但是,没有内置的python或django实用程序来执行我所知道的unicode-to-html-entity转义。然而,快速谷歌搜索会出现几次。但是,我不建议这样做。 Django是Unicode安全的,最好利用这个事实!
答案 1 :(得分:1)
这是django-sociable
本身的一个错误,因为它错误地处理unicode
。我建议reporting this bug,然后与开发人员一起修复。