【问题标题】:django get requests - getting Russian symbols from the formdjango get requests - 从表单中获取俄语符号
【发布时间】: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 -*-,我的模板中有&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;

【问题讨论】:

  • 您的控制台中的编码是什么?检查 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


【解决方案1】:

检查您的所有模板文件是否都以 utf-8 编码保存;另外,请阅读有关unicode data 的 django 文档。

【讨论】:

  • 我已经使用 Sublime Text 2 以 UTF-8 格式重新保存了我的所有文件,但在您提到的文章中没有发现任何对我有用的东西(也许我太累了,可能会错过一些有价值的东西) .无论如何,我作弊了一点:我将上下文中的编码字符串直接发送到我的模板并在那里手动形成一个输入字段,而不使用 django 表单。它对我来说很好,虽然它不是绝对正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
相关资源
最近更新 更多