1

DjangoとDatepickerをTwitter-Bootstrapと一緒に使用していますが、form.fieldsが同じウィジェット(DateInput)の場合、同じクラスと同じIDを持つようにします。具体的には、それに応じてIDを変更したいと思います。毎回異なるIDを持つ必要があります。

これは私が以下に定義したクラスです。IDを毎回異なるものに変更するにはどうすればよいですか。

class MyDatePicker(forms.DateInput)
  def __init__(self, *args, **kwargs):
      attrs = kwargs.pop("attrs",{})
      attrs["class"] = "datepick" 
      attrs["id"] ="date_1"
      kwargs["attrs"] = attrs
      super(MyDatePicker, self).__init__(*args, **kwargs)

どうすればそれを行うことができますか?それについていくつかの助けが必要です...どんな提案も歓迎します...

4

1 に答える 1

1

テンプレートタグを登録して、ウィジェットの種類を確認できます。

@register.filter('klass')
def klass(obj):
    return obj.__class__.__name__

次に、テンプレートで:

{% load your_filter_module %}
<form id="form" enctype="multipart/form-data" class="form-horizontal" method="POST" action="">{% csrf_token %}
    <fieldset>
        {{ form.non_field_errors }}
        {% for field in form %}
            <div class="control-group{% if field.errors %} error{% else %}{% if form_errors %} success{% endif %}{% endif %}">
                <label class="control-label" for="{{ field.auto_id }}">{% trans field.label %}</label>
                <div class="controls">
                    {% if field.field.widget|klass == "CheckboxInput" %}
                        <label class="checkbox">
                            <input type="checkbox" id="{{ field.auto_id }}" name="{{ field.name }}"{% if field.value == "on" %} checked{% endif %}>
                            {% trans "Some random text" %}
                        </label>
                    {% endif %}
                    # ... etcetera continue check for other classes ...

注:よりクリーンなDRYアプローチは、ループとクラスロジック(水平/垂直など)をフィルターに追加して、htmlウィジェットを返すことです。

于 2012-06-12T11:07:49.993 に答える