次のようなテンプレートでレンダリングされる入力フィールドがあります。
_<div class="field">
{{ form.city }}
</div>
_
次のようにレンダリングされます:
_<div class="field">
<input id="id_city" type="text" name="city" maxlength="100" />
</div>
_
ここで、レンダリングされる入力要素に_autocomplete="off"
_属性を追加したいとします。どうすればよいですか?またはonclick="xyz()"
または_class="my-special-css-class"
_?
city = forms.CharField(widget=forms.TextInput(attrs={'autocomplete':'off'}))
広告で申し訳ありませんが、最近アプリをリリースしました( https://github.com/kmike/Django-widget-tweaks ) python code:
{% load widget_tweaks %}
...
<div class="field">
{{ form.city|attr:"autocomplete:off"|add_class:"my_css_class" }}
</div>
または、代わりに、
{% load widget_tweaks %}
...
<div class="field">
{% render_field form.city autocomplete="off" class+="my_css_class" %}
</div>
「ModelForm」を使用している場合:
class YourModelForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(YourModelForm, self).__init__(*args, **kwargs)
self.fields['city'].widget.attrs.update({
'autocomplete': 'off'
})
ModelForm
を使用している場合は、__init__
@Artificiooが彼の答えで提供したように、それに関してMetaにはwidgets
辞書があります:
class AuthorForm(ModelForm):
class Meta:
model = Author
fields = ('name', 'title', 'birth_date')
widgets = {
'name': Textarea(attrs={'cols': 80, 'rows': 20}),
}
このためにアプリ全体を使いたくありませんでした。代わりに、私はここで次のコードを見つけました https://blog.joeymasip.com/how-to-add-attributes-to-form-widgets-in-Django-templates/
# utils.py
from Django.template import Library
register = Library()
@register.filter(name='add_attr')
def add_attr(field, css):
attrs = {}
definition = css.split(',')
for d in definition:
if ':' not in d:
attrs['class'] = d
else:
key, val = d.split(':')
attrs[key] = val
return field.as_widget(attrs=attrs)
hTMLファイルでタグを使用する
{% load utils %}
{{ form.field_1|add_attr:"class:my_class1 my_class2" }}
{{ form.field_2|add_attr:"class:my_class1 my_class2,autocomplete:off" }}
私は同じ問題に直面し、次のようにそれを解決することができました:このリンクのコードに従い、少し修正を追加しました https://blog.joeymasip.com/how-to-add-attributes-to -form-widgets-in-Django-templates /
夏らしい:
ステップ1:add_attr.pyというファイルを作成し、アプリケーション内のtemplatetagsフォルダーに配置します
ステップ2:次のコードをadd_attr.pyに追加します
from Django.template import Library
register = Library()
@register.filter(name='add_attr')
def add_attr(field, css):
attrs = {}
definition = css.split(',')
for d in definition:
if '=' not in d:
attrs['class'] = d
else:
key, val = d.split('=')
attrs[key] = val
return field.as_widget(attrs=attrs)
ステップ3:次のようにタグを使用します:タグをロードします:
{% load add_attr %}
例:
<input type="email" id="defaultLoginFormEmail" class="form-control mb-4" placeholder="E-mail">
になる
{{ form.email|add_attr:'id=defaultLoginFormEmail,class=form-control mb-4,placeholder=E-mail' }}