gpt4 book ai didi

django - 在 Django 表单中,如何呈现单选按钮以便在页面上分隔选项?

转载 作者:行者123 更新时间:2023-12-02 02:57:01 24 4
gpt4 key购买 nike

我有一个带有两个选择单选按钮元素的 Django 表单。我希望表单呈现或多或少像这样:

( ) I prefer beer     The last sporting event I attended was: [           ]     My favorite NASCAR driver is:           [           ]( ) I prefer wine     The last opera/play I attended was:     [           ]     My favorite author is:                  [           ]

换句话说,我想拆分两个单选按钮选项。我怎么做?使用默认的 form.as_table 渲染,选项是彼此相邻绘制的,这是我不想要的。

(向 NASCAR 和歌剧爱好者致歉。)

最佳答案

我做了一些挖掘,并在这个问题的答案中找到了线索similar post这指向有点过时的 post in django-users .

借用forms.py中as_widget()方法的一些代码我设计了一种可以添加到表单中的方法,以便检索以 HTML 形式呈现的 RadioSelect 小部件的选择。

class MyForm(forms.Form):
MY_CHOICES = (
('opt0', 'Option zero'),
('opt1', 'Option one'),
)
myfield = forms.ChoiceField(widget=forms.RadioSelect, choices=MY_CHOICES)

def myfield_choices(self):
"""
Returns myfield's widget's default renderer, which can be used to
render the choices of a RadioSelect widget.
"""
field = self['myfield']
widget = field.field.widget

attrs = {}
auto_id = field.auto_id
if auto_id and 'id' not in widget.attrs:
attrs['id'] = auto_id

name = field.html_name

return widget.get_renderer(name, field.value(), attrs=attrs)

然后在模板中,您可以访问单独的单选按钮选项,如下所示:

<ul>
<li>
{{ myform.myfield_choices.0 }}
My custom HTML that goes with choice 0
</li>
<li>
{{ myform.myfield_choices.1 }}
Different HTML that goes with choice 1
</li>
</ul>

{% for choice in myform.myfield_choices %}
<div>
{{ choice }}
</div>
{% endfor %}

我很确定这是一个坏主意。随着 django 的发展,它可能会在某个时候停止工作。它通过从 as_widget() 复制代码来违反 DRY。 (说实话,我没有花时间完全理解 as_widget 中的代码)我只是将它用作临时黑客。也许有更好的方法涉及自定义模板标签。如果是这样,请告诉我。

关于django - 在 Django 表单中,如何呈现单选按钮以便在页面上分隔选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6766994/

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