gpt4 book ai didi

django - 在 Django 中只渲染 MultiWidget 的一部分

转载 作者:行者123 更新时间:2023-12-03 21:27:17 26 4
gpt4 key购买 nike

我有一个 Django 表单字段和一个由两个 TextInput 组成的 MultiWidget。

在模板中呈现表单时,有一个方便的符号

{{ formname.fieldname }}

用于呈现单个字段。当我将它用于带有 MultiWidget 的字段时,它将显示两个 HTML 输入元素。是否对仅显示第一个 HTML 输入元素的符号进行了轻微修改? ({{ formname.fieldname.0 }} 不起作用。)

最佳答案

我找到了解决这个问题的方法,需要两段代码。

首先

将MultiWidget转成字符串的render方法比较长。我们需要复制并粘贴它,并在最后一行稍作修改,使其返回一个数组。

class OurMultiWidget(forms.MultiWidget):
...

def render(self, name, value, attrs=None):
"""Copy and past from original render method"""
if self.is_localized:
for widget in self.widgets:
widget.is_localized = self.is_localized
# value is a list of values, each corresponding to a widget
# in self.widgets.
if not isinstance(value, list):
value = self.decompress(value)
output = []
final_attrs = self.build_attrs(attrs)
id_ = final_attrs.get('id', None)
for i, widget in enumerate(self.widgets):
try:
widget_value = value[i]
except IndexError:
widget_value = None
if id_:
final_attrs = dict(final_attrs, id='%s_%s' % (id_, i))
output.append(widget.render(name + '_%s' % i, widget_value, final_attrs))
# Original:
# return mark_safe(self.format_output(output))
# Only this line was written by myself:
return [mark_safe(self.format_output(x)) for x in output]

第二

在模板中写入{{ formname.fieldname }}会自动调用该字段的unicode方法,并将结果作为字符串处理。因为我们想要一个数组,所以我们需要绕过 unicode 方法并直接访问它将返回的内容。这就是 as_widget 方法。因此,要调用 OurMultiWidget 的第一部分,我们需要在模板中使用以下代码:

{{ formname.fieldname.as_widget.0 }}

关于django - 在 Django 中只渲染 MultiWidget 的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24866936/

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