2012-03-07 11 views

答えて

12

HTML/XHTMLで<input readonly>という属性について話しているとします。これはリンク先のディスカッションスレッドについてではありません。 (リンクされたスレッドは、渡されたフォーム入力を無視する方法の下位レベルの問題です)

readonly属性(実際にはフィールドの属性)を設定する方法は、テンプレートのkeyword-argです。神社を使用している場合、これは(HTML5)のようになります。

{{ form.myfield(readonly=true) }} 

とXHTMLまたは0.6.3よりも古いWTFormsのバージョンの:

{{ form.myfield(readonly="readonly") }} 

ただ、「読み取り専用」属性は単なるヒントであることに注意してくださいブラウザに表示され、ユーザーが送信した内容には影響しません。つまり、悪意のあるユーザー(またはカスタムJS a la greasemonkeyまたはJSコンソールまたはDOMツリーを持つブラウザを使用しているユーザー)は、readonly属性が設定されているかどうかに関係なく、フィールドの値を変更するPOST要求を生成する可能性があります入力タグ。

この理由から、readonly属性は、ユーザーエクスペリエンスを変更するオプション(たとえば、JSを使用していくつかのイベント/アクションに基づいてフィールドを無効にする)としてのみ有用で、 'readonly'フィールドからの入力はno他のフォーム入力よりも信頼性が高い。

+13

フォームを宣言しているときに、ウィジェットなどにkwargsとしてこれらを渡すことができないようです。 – coleifer

2

https://wtforms-components.readthedocs.org/en/latest/#

from wtforms import Form, DateField, TextField 
from wtforms_components import TimeField, read_only 

class EventForm(Form): 
    name = TextField('Name') 
    start_date = DateField('Start date') 
    start_time = TimeField('Start time') 

    def __init__(self, *args, **kwargs): 
     super(EventForm, self).__init__(*args, **kwargs) 
     read_only(self.name) 
3

溶液は、フォームフィールドの宣言でrender_kwを使用しています。

my_field = fields.StringField('Label', render_kw={'readonly': True}) 
+0

Jinja2からアクセスしたい場合は、次のようにすることができます。 {%if form.my_field.render_kw.readonly} readonly blabla {%endif%} – techniao

関連する問題