2017-05-08 109 views
0

単純なユーザー設定フォームのjinja2テンプレートがあります。設定は、python辞書としてrender_template()関数に渡されます。設定に応じて、グループ内のラジオボタンの1つにチェックマークを付ける必要があります。jinja2テンプレートのラジオボタンを選択

Q:きれいに行うには、コードの繰り返しはほとんどありませんか?

以下は私の現在の解決方法です。それは動作しますが、それは醜いです、そして2つ以上のラジオボタンで、それはすぐに管理するのが難しくなります。おそらくもっと良い方法があります。

私は2つの文字列変数を使用します(2つのラジオbtns用)。そのうちの一つが空になり、もう一方は好みの設定に応じて、「確認」に設定されます。

{% if user_prefs['when_done'] == 'index' %} 
    {% set indexchecked = 'checked' %} 
    {% set backchecked = '' %} 
{% else %} 
    {% set indexchecked = '' %} 
    {% set backchecked = 'checked' %} 
{% endif %} 
<!-- With more radio buttons here, this would be a mess! --> 

そして、私は、テンプレートにこれらの文字列を使用します。

<form action="{{ url_for('prefs') }}" method="post"> 
    <fieldset> 
     <div class="radio text-left"> 
     <p><strong>After completing a task:</strong></p> 
      <label> 
      <input type="radio" name="when_done" value="index" {{ indexchecked }}> 
      Return to homepage 
      </label> 
      <br/> 
      <label> 
      <input type="radio" name="when_done" value="task" {{ taskchecked }}> 
      Go to next task 
      </label> 
     </div> 

     <div class="form-group"> 
      <button class="btn btn-default" type="submit">Update preferences</button> 
     </div> 
    </fieldset> 
</form> 

答えて

0

私は考えテンプレートからインデックスチェックとバックチェックの計算をコードに移動します。また、より少ないパラメータをrender_templateメソッドに渡すために、辞書のアンパックを使用することもできます。あなたがアンパックで辞書を使用することができます渡されたパラメータの数を減らすために

do_index = user_prefs['when_done'] == 'index' 
index_checked = 'checked' if do_index else '' 
back_checked = '' if do_index else 'checked' 

render_template('pages/something.html', form=some_form, index_checked=index_checked, back_checked=back_checked) 

template_parameters = dict(form=some_form, index_checked=index_checked, back_checked=back_checked) 
render_template('pages/something.html', **template_parameters) 
関連する問題