【发布时间】:2012-12-07 09:25:01
【问题描述】:
我的 forms.py 中有一个搜索表单:
class search_form(forms.Form):
text = forms.CharField( widget =
forms.TextInput({ "placeholder": "введите слово" }) )
我的表单标题是
<form action='/search_results/' method='get'>
然后我从我的基地获取属性
def search_results(request):
context = {}
if request.GET:
form = search_form(request.GET)
if form.is_valid():
print form.cleaned_data['text']
properties = PropertyText.objects.filter(value__icontains =
form.cleaned_data['text'])
如果我使用拉丁符号 - 我会得到正确的结果,但一旦我尝试搜索俄语单词就会失败。例如,我输入单词для(我的文章中到处都是),但没有得到任何结果。 print form.cleaned_data['text'] 给我返回了一些奇怪的符号ÑÑо,print request.GET['text'] 也是如此
encode('utf-8') 没有结果,decode('utf-8') 抛出异常 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)
我的views.py、forms.py和urls.py中有# -*- coding: utf-8 -*-,我的模板中有<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
【问题讨论】:
-
您的控制台中的编码是什么?检查 django-debug-toolbar 中的 sql 查询。
-
我正在使用设置中设置了 UTF-8 的腻子。查询是
SELECT ••• FROM 'technologies_propertytext' WHERE 'technologies_propertytext'.'value' LIKE '%ÑÑо%' -
好吧,我刚刚通过将 clean_data 更改为以下方式解决了这个问题:
self.cleaned_data['text'] = self.cleaned_data['text'].encode('iso-8859-1').decode('utf-8'),但是现在,当我将我的 request.GET 信息返回表单时(在下一页) 与context['search_form'] = search_form(request.GET or None)我有同样的问题。它返回给我ÑÑо -
它适用于我,无需编码/解码。好像您的浏览器以错误的编码发送数据,您能检查一下吗?
-
我在 Http 标头的调试工具栏中找到了这个
HTTP_ACCEPT_CHARSET windows-1251,utf-8;q=0.7,*;q=0.3。事实上,我不知道在哪里可以找到这些信息
标签: django encoding utf-8 get get-request