2016-09-12 7 views
0

Djangoフォームの使用中に奇妙な動作が発生しました。私のforms.pyに私はユーザー登録フォームを持っており、各フィールドごとにラベルを設定しています。それから私はフォームをコンテキストに渡しています。次のようにhtmlファイルで、私は、フォームを使用しています:非ASCII文字で終了すると入力フィールドのラベルが表示されない

{% for field in UserForm %} 
<div class="form-group"> 
    {{field.label_tag}} 
    {{field}} 
</div> 
{% endfor %} 

私のフォームは次のようになります。

class UserForm(UserCreationForm): 

    first_name = forms.CharField(
     label = 'Imię', 
     max_length=255, 
     widget=forms.TextInput(
      attrs={ 
       'class': 'form-control', 
       'name': 'Name', 
       'placeholder': 'Imię', 
       'required' : '', 

      } 
     ) 
    ) 

    last_name = forms.CharField(
     label = 'Nazwisko', 
     max_length=255, 
     widget=forms.TextInput(
      attrs={ 
       'class': 'form-control', 
       'name': 'Surname', 
       'placeholder': 'Nazwisko', 
       'required' : '', 

      } 
     ) 
    ) 

問題は、一つのフィールドのラベルが表示されていない、 <label>タグがあるということです出力htmlファイルでも生成されません。

問題のあるラベルは、label = 'Imię',です。ラベルが非ASCII文字で終わると、ラベルは生成されないことに気付きました。私は他のフィールドラベルについてもそれをテストしました。

forms.pyの冒頭に# -*- coding: utf-8 -*-が含まれています(そうしないと、ファイル内に非ASCII文字に関するエラーが発生する)ので、この問題の原因にはなりません。また、Notepad ++で、このファイルが実際にUTF-8エンコーディングを使用していることを確認しました。

私はDjango 1.9を使用していますが、Pythonのバージョンは2.7.6です。

何か助けていただければ幸いです。

+0

あなたの 'forms.py'からコードを投稿できますか? –

+0

これを試しましたか:http://stackoverflow.com/questions/1998987/how-do-i-use-django-and-utf-8-content-type-for-template? –

+0

@IainShelvingtonファイルはこちら[リンク] http://pastebin.com/RYjyRsgj – BigMacintosh

答えて

0

Python 2.7には、2種類の文字列、通常とユニコードがあります。通常の文字列(デフォルトで使用)は、Unicode文字を格納できません。あなたのフォームでは、通常の文字列をラベルに使用しています。それが問題の原因です。

あなたは、その文字列にUnicodeを使用することができ、次のいずれか

first_name = forms.CharField(
     label = u'Imię', 
     max_length=255, 
     widget=forms.TextInput(
      attrs={ 
       'class': 'form-control', 
       'name': 'Name', 
       'placeholder': u'Imię', 
       'required' : '', 

      } 
     ) 
    ) 

または追加することで、デフォルトではUnicodeとして扱われることを、このファイル内のすべての文字列を設定します。

from __future__ import unicode_literals 

の一番上にファイル(ファイルのエンコーディングを設定した直後)。

変更されたPython 3では、デフォルトではすべての文字列がUnicodeとして扱われます。

+0

ありがとう、それは今動作します!私は、文字列がPython 3より前にデフォルトでunicodeとして扱われていることに気づいていませんでした。ユニコード文字を含む他の文字列がうまく動作していたため、問題があるとは思わなかった。 – BigMacintosh

+0

この回答が問題を解決した場合は、それを受け入れたものとしてマークしてください。 upvotingも検討してください。 – GwynBleidD

関連する問題