0

テンプレートの個々の出力を処理するための追加のプロパティを提供できるカスタム フィールドを追加したいと考えています。たとえば、ここに私のクラスがあります:

class CustomField(CharField):
    suffix = "things"

そして、ブロックfield.htmlを追加した場所に付随するもの:field.suffix

<div class="controlGroup clearfix {% if field.errors %}error{% endif %}">
   <label class="controlLabel" for="{{ field.auto_id }}">{{ field.label }}</label>
   <div class="controls">
       {{ field }}
       {% if field.suffix %}
           <span class="suffix">{{ field.suffix }}</span>
       {% endif %}
       {% if field.errors %}
           <span class="helpInline">{{ field.errors }}</span>
       {% endif %}
   </div>
</div> 

残念ながら、接尾辞ブロックは単純に出力されません。

編集:明確にするために、以下の現在の回答は両方とも、ウィジェット属性の追加を対象としています。カスタムCSSクラスではなく、テンプレートで使用するカスタム文字列を実際に追加しようとしています。

4

3 に答える 3

0

簡単な例として、フォームフィールドに使用するウィジェットのattrsディクショナリをオーバーライドできます。カスタムフィールドを作成する必要はありません。

class YourForm(forms.Form):
  some_field = forms.CharField(widget=forms.TextInput(attrs={'class': 'suffix'})

本当にカスタムフィールドを作成したい場合は、カスタムウィジェットを作成し、renderメソッドを制御する必要があります。レンダリングするフォームコントロールの種類に応じて、djangoが提供する同等のウィジェットからカスタムウィジェットを継承します。

于 2012-09-10T08:03:25.727 に答える
0

最終的には、独自のウィジェットを作成してこれを行いました。

class UsernameInput(TextInput):
    """
    Creates a widget specifically for appending the username suffix as a label
    """  9 
    def render(self, name, value, attrs=None):
        widget = super(UsernameInput, self).render(name, value, attrs)
        widget += u'<span class="field-suffix">@%s</span>' % USERNAME_DOMAIN_PART
        return mark_safe(widget)

そして、次のようにウィジェットを指定して、サインアップフォームで:

username = forms.EmailField(label="Preferred Username",
                            widget=UsernameInput(),
                            error_messages={'invalid': "Please enter a valid email address"})
于 2012-09-11T10:33:02.400 に答える
0

属性は、2 つの方法でフォーム フィールドに渡すことができます。以下にサンプルコードを示します。

class ArticleForm(forms.ModelForm):
    class Meta:
        model = MyModel
        widgets = {
            'field1' : forms.TextInput(attrs = {'class': 'suffix'}),
            'field2' : forms.TextInput(attrs = {'class': 'suffix'}),
        }

また

class ArticleForm(forms.ModelForm):
    class Meta:
        model = MyModel

    def __init__(self, *args, **kw):
        super(forms.ModelForm, self).__init__(*args, **kw)
        self.fields['field1'].widget.attrs['class'] = 'suffix'
        self.fields['field2'].widget.attrs['class'] = 'suffix'

最初の例のようにウィジェットを使用するか、2 番目の例のようにinitで使用できます。どちらも機能します。

編集:上記の例を使用して、任意の属性を django フォーム フィールドに渡すことができます。

于 2012-09-10T08:25:25.847 に答える