Django : 양식의 입력 필드에 임의의 html 속성을 어떻게 추가합니까?
다음과 같은 템플릿으로 렌더링되는 입력 필드가 있습니다.
<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 )을 출시하여 디자이너가 파이썬 코드를 건드리지 않고도 할 수 있습니다.
{% 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'
})
을 사용하는 경우 그의 답변에 제공된 @Artificioo ModelForm
로 사용할 가능성을 제외 하고 Meta에 해당 문제에 대한 사전이 있습니다.__init__
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 -장고 템플릿 /
여름 :
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' }}
'IT story' 카테고리의 다른 글
.Net 4.0에서 Tuple을 사용할 수있는 실제 예? (0) | 2020.08.22 |
---|---|
Bash 스크립트의 한 인스턴스 만 실행되도록하는 가장 좋은 방법은 무엇입니까? (0) | 2020.08.22 |
UIButton 텍스트 변경 (0) | 2020.08.22 |
요소의 XSLT 이름이 있습니까? (0) | 2020.08.22 |
Java의 문자열 표현에서 로케일을 얻는 방법은 무엇입니까? (0) | 2020.08.22 |