2015-01-05 14 views
6

フォームを使用してページをレンダリングするときにUnicodeEncodeErrorが発生しました。私はそのようにそれらを作成するビューでレンダリングフォーム( 'utf-8')のDjango UnicodeEncodeError

<table> 
    {{user_form.as_table}} 
    {{individual_form.as_table}} 
</table> 

user_form = UserCreationForm(request.POST) 
individual_form = IndividualForm(request.POST) 

とページ

context = {'gd': generalData(request), 
      'head': "images/header_individual.png", 
      'individual': user.individual, 
      'user_form': user_form, 
      'individual_form': individual_form, 
      'title': _("EDIT ACCOUNT"), } 
return render(request, 
       "main/edit_account.html", 
       context) 
に送ら

UnicodeEncodeError at /individual/acc/ 

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

ここではHTMLの断片は、(フォームの標準的な使用)です

私のすべての.pyファイルには、私は

# -*- coding: utf-8 -*- 
最初の行に

、およびHTMLに私は単純な文字列の場合に

unicode(your_string) 

は十分だろうが、私は本当に知らないことが判明

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

ましたフォームでそれを使う方法。私はそれらを反復して何らかのフィルタを設定する必要がありますか?

EDIT:フルトレースバックを追加:

UnicodeEncodeError at /individual/acc/ 

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

Request Method:  GET 
Request URL: http://127.0.0.1:8080/individual/acc/ 
Django Version:  1.7.1 
Exception Type:  UnicodeEncodeError 
Exception Value:  

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

Exception Location:  /home/mknapczyk/Workspace/ASPHER/src/main/models.py in __str__, line 42 
Python Executable: /home/mknapczyk/Workspace/ASPHER/env/bin/python 
Python Version:  2.7.6 
Python Path:  

['/home/mknapczyk/Workspace/ASPHER/src', 
'/home/mknapczyk/Workspace/ASPHER/env/lib/python2.7', 
'/home/mknapczyk/Workspace/ASPHER/env/lib/python2.7/plat-x86_64-linux-gnu', 
'/home/mknapczyk/Workspace/ASPHER/env/lib/python2.7/lib-tk', 
'/home/mknapczyk/Workspace/ASPHER/env/lib/python2.7/lib-old', 
'/home/mknapczyk/Workspace/ASPHER/env/lib/python2.7/lib-dynload', 
'/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-x86_64-linux-gnu', 
'/usr/lib/python2.7/lib-tk', 
'/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages', 
'/home/mknapczyk/Workspace/ASPHER/env/lib/python2.7/site-packages'] 

Server time: Mon, 5 Jan 2015 14:11:25 +0000 
Unicode error hint 

The string that could not be encoded/decoded was: Małopols 

トレースバック:

File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    111.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view 
    22.     return view_func(request, *args, **kwargs) 
File "/home/mknapczyk/Workspace/ASPHER/src/main/views.py" in edit_account 
    105.    context) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/shortcuts.py" in render 
    48.  return HttpResponse(loader.render_to_string(*args, **kwargs), 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/template/loader.py" in render_to_string 
    178.   return t.render(context_instance) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
    148.    return self._render(context) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/template/base.py" in _render 
    142.   return self.nodelist.render(context) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
    844.     bit = self.render_node(node, context) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
    80.    return node.render(context) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render 
    126.   return compiled_parent._render(context) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/template/base.py" in _render 
    142.   return self.nodelist.render(context) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
    844.     bit = self.render_node(node, context) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
    80.    return node.render(context) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/template/loader_tags.py" in render 
    65.     result = block.nodelist.render(context) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/template/base.py" in render 
    844.     bit = self.render_node(node, context) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/template/debug.py" in render_node 
    80.    return node.render(context) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/template/debug.py" in render 
    90.    output = self.filter_expression.resolve(context) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/template/base.py" in resolve 
    596.     obj = self.var.resolve(context) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/template/base.py" in resolve 
    734.    value = self._resolve_lookup(context) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/template/base.py" in _resolve_lookup 
    788.        current = current() 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/forms/forms.py" in as_table 
    257.    errors_on_separate_row=False) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/forms/forms.py" in _html_output 
    219.      'field': six.text_type(bf), 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/forms/forms.py" in __str__ 
    508.   return self.as_widget() 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/forms/forms.py" in as_widget 
    560.   return force_text(widget.render(name, self.value(), attrs=attrs)) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/forms/widgets.py" in render 
    504.   options = self.render_options(choices, [value]) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/forms/widgets.py" in render_options 
    530.   for option_value, option_label in chain(self.choices, choices): 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/forms/models.py" in __iter__ 
    1083.     yield self.choice(obj) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/forms/models.py" in choice 
    1090.   return (self.field.prepare_value(obj), self.field.label_from_instance(obj)) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/forms/models.py" in label_from_instance 
    1144.   return smart_text(obj) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/utils/encoding.py" in smart_text 
    52.  return force_text(s, encoding, strings_only, errors) 
File "/home/mknapczyk/Workspace/ASPHER/env/local/lib/python2.7/site-packages/django/utils/encoding.py" in force_text 
    87.     s = six.text_type(bytes(s), encoding, errors) 
File "/home/mknapczyk/Workspace/ASPHER/src/main/models.py" in __str__ 
    42.  return str(self.name) 

Exception Type: UnicodeEncodeError at /individual/acc/ 
Exception Value: 'ascii' codec can't encode character u'\u0142' in position 2: ordinal not in range(128) 
+1

例外の*完全なトレースバック*は何ですか? –

+0

djangoデバッグエラーメッセージとトレースバックの両方を追加しました。 –

答えて

22

あなたのモデル__str__が正しくUnicodeを処理していません。あなたは、明示的なエンコーディングを使用する必要があります:

def __str__(self): 
    return self.name.encode('utf8') 

またはforce_bytes() utility functionを使用します。

from django.utils.encoding import force_bytes 

def __str__(self): 
    return force_bytes(self.name) 

__str__方法 Pythonの2のバイト文字列を返す必要があり

おそらく追加しますこの問題を避けるためのモデルの方法は__unicode__

def __unicode__(self): 
    return self.name 

Python __str__ versus __unicode__およびModel.__unicode__ reference documentationも参照してください。

+1

うん、そうだよ。私はユニコード(self.name)を持っていた、私は十分であると思った...ありがとう! –

+0

あなたは正しい答えを得るときに驚くべき感情です。どうも! –

関連する問題