gpt4 book ai didi

python - Django 表单小部件渲染

转载 作者:行者123 更新时间:2023-12-01 06:11:35 26 4
gpt4 key购买 nike

嘿伙计们,我想创建一个小部件,以以下格式呈现电话字段

box - box2 - box3

我尝试了同一网站中提供的不同代码片段,但是它们并没有覆盖 html 渲染,这正是我想要做的

例如这个:

class USPhoneNumberMultiWidget(forms.MultiWidget):
"""
A Widget that splits US Phone number input into three <input type='text'> boxes.
"""
def __init__(self,attrs=None):
widgets = (
forms.TextInput(attrs={'size':'3','maxlength':'3', 'class':'phone'}),
forms.TextInput(attrs={'size':'3','maxlength':'3', 'class':'phone'}),
forms.TextInput(attrs={'size':'4','maxlength':'4', 'class':'phone'}),
)
super(USPhoneNumberMultiWidget, self).__init__(widgets, attrs)

def decompress(self, value):
if value:
return value.split('-')
return (None,None,None)

def value_from_datadict(self, data, files, name):
value = [u'',u'',u'']
# look for keys like name_1, get the index from the end
# and make a new list for the string replacement values
for d in filter(lambda x: x.startswith(name), data):
index = int(d[len(name)+1:])
value[index] = data[d]
if value[0] == value[1] == value[2] == u'':
return None
return u'%s-%s-%s' % tuple(value)

渲染 html 输入:

box|box2|box3

那么我如何覆盖渲染以便它渲染:

box - box2 - box3

我也希望有任何解释如何创建自定义小部件的文档,但到目前为止我还没有找到任何文档

模型.py:

class Preference(models.Model):
phone = models.PositiveIntegerField(blank=True)

class PreferenceForm(ModelForm):

class Meta:
model = Preference
widgets = {
'phone':USPhoneNumberMultiWidget(attrs={'class':'firstnumberbox', 'id':'firstcellphone', 'name':'firstphone'}),

Html 呈现:

<dt><label for="firstcellphone"> Cell Phone:</label></dt> 
<dd class="phones"><input name="firstphone" id="firstcellphone_0" maxlength="3" type="text" class="firstnumberbox" size="3" /> - <input name="firstphone" id="firstcellphone_1" maxlength="3" type="text" class="firstnumberbox" size="3" /> - <input name="firstphone" id="firstcellphone_2" maxlength="4" type="text" class="firstnumberbox" size="4" /></dd>

最佳答案

您可以重写 MultiWidget 的 format_output 方法:

def format_output(self, rendered_widgets):
return u'%s - %s - %s' % \
(rendered_widgets[0], rendered_widgets[1], rendered_widgets[2])

关于自定义表单小部件的文档并不多。我只做了几个,他们花了很多功夫。希望有帮助!

关于python - Django 表单小部件渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5641463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com