html option屬性,Django中的form如何設置field的html屬性呢?

 2023-10-07 阅读 24 评论 0

摘要:在Django中無論何種field,都有一個widget的屬性: 1 class Field(object): 2 widget = TextInput # Default widget to use when rendering this type of Field. 3 hidden_widget = HiddenInput # Default widget to use when rendering this as "hi

在Django中無論何種field,都有一個widget的屬性:

1 class Field(object):
2     widget = TextInput  # Default widget to use when rendering this type of Field.
3     hidden_widget = HiddenInput  # Default widget to use when rendering this as "hidden".

如上所示,widget默認是TextInput。

而TextInput是一個繼承Input的一個類:

1 class TextInput(Input):
2     input_type = 'text'
3 
4     def __init__(self, attrs=None):
5         if attrs is not None:
6             self.input_type = attrs.pop('type', self.input_type)
7         super(TextInput, self).__init__(attrs)

html option屬性。往上接著找,Input繼承于Widget,不同于Widget的是它有個input_type。當繼承Input時需要指明input_type,像上面的TextInput一樣指明為'text',類似的,PasswordInput則將其指明為'password'。

 1 class Widget(six.with_metaclass(RenameWidgetMethods)):
 2     needs_multipart_form = False  # Determines does this widget need multipart form
 3     is_localized = False
 4     is_required = False
 5     supports_microseconds = True
 6 
 7     def __init__(self, attrs=None):
 8         if attrs is not None:
 9             self.attrs = attrs.copy()
10         else:
11             self.attrs = {}

在Widget中有個attrs的屬性,這個屬性其實可以用來設置對應field的html屬性。這個屬性在Widget的render里會被引用。

所以如果你需要設置某個字段的html屬性時,可以這么做:

1 field = forms.CharField()
2 field.widget.attrs['readonly']='true'

如果是一個這樣的form:

from user.models import User
from django import formsclass RegisterForm(forms.ModelForm):class Meta:fields = ('first_name', 'last_name', 'email', 'username',)

form標記的屬性,你需要這樣才能設置field的attrs:

for field in form:field.field.widget.attrs['readonly']='false'

為什么要這樣呢?因為ModelForm的Field是一個BoundField:

 1 class BoundField(object):
 2     "A Field plus data"
 3     def __init__(self, form, field, name):
 4         self.form = form
 5         self.field = field
 6         self.name = name
 7         self.html_name = form.add_prefix(name)
 8         self.html_initial_name = form.add_initial_prefix(name)
 9         self.html_initial_id = form.add_initial_prefix(self.auto_id)
10         if self.field.label is None:
11             self.label = pretty_name(name)
12         else:
13             self.label = self.field.label
14         self.help_text = field.help_text or ''
15         self._initial_value = UNSET

BoundField不像CharField或其他一般的Field,并不是直接繼承于Field。所以當你需要獲得BoundField的Field的對象的時候,需要使用它的field的屬性。

?

django form?轉載于:https://www.cnblogs.com/welt/p/5846548.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/125913.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息