1

我将 Django 和 Datepicker 与 Twitter-Bootstrap 一起使用,如果它们属于相同的小部件(DateInput),我希望 form.fields 具有相同的类和相同的 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 回答