Python 为RadioSelect中的每个选项设置帮助\u文本
我可以在任何表单字段上设置help_text属性,但是否可以在RadioSelect()所用的选项上设置help_text 我想寻找一种干净的方式,在每个单选按钮下显示一些帮助信息 下面是模型和表单的代码,我可以在带有标签、输入元素和帮助文本的模板中呈现name属性。我还希望能够使用标签(“成员类型”)、单选按钮(“打开成员资格”和“关闭成员资格”)以及与每个单选元素关联的帮助文本(“任何人都可以加入此组”和“只有选定成员才能加入此组”)呈现成员资格类型属性Python 为RadioSelect中的每个选项设置帮助\u文本,python,django,Python,Django,我可以在任何表单字段上设置help_text属性,但是否可以在RadioSelect()所用的选项上设置help_text 我想寻找一种干净的方式,在每个单选按钮下显示一些帮助信息 下面是模型和表单的代码,我可以在带有标签、输入元素和帮助文本的模板中呈现name属性。我还希望能够使用标签(“成员类型”)、单选按钮(“打开成员资格”和“关闭成员资格”)以及与每个单选元素关联的帮助文本(“任何人都可以加入此组”和“只有选定成员才能加入此组”)呈现成员资格类型属性 假设您使用的是RadioSelect
假设您使用的是
RadioSelect
作为forms.ChoiceField
的小部件,您可以执行以下操作:
choices = (('1', 'First help_text here'),
('2', 'Second help_text here'),
('3', 'Third help_text here'),
)
class MyForm(forms.Form):
...
choice = forms.ChoiceField(widget = RadioSelect, choices = choices)
这并不是严格地使用帮助文本,但在大多数情况下,它应该能够完成工作。@Rishabh是正确的,但我将进一步阐述,乍一看,它似乎不是解决方案,尽管它是;或者,至少,它可以在不深入django表单的情况下得到有用的效果 元组的第二个元素出现在“label”标记中,因此任何元素都是允许的;例如: 期望的结果 或者类似的东西
<ul>
<li><label for="id_ticket_0">
<input type="radio" id="id_ticket_0" value="PARTTIME" name="ticket">
<em>Part Time</em> Valid on Friday Night and Saturday Only
</label></li>
<li><label for="id_ticket_1">
<input type="radio" id="id_ticket_1" value="DAYTIME" name="ticket">
<em>Casual</em> Valid on Saturday Only
</label></li>
<li><label for="id_ticket_2">
<input type="radio" id="id_ticket_2" value="EARLYBIRD" name="ticket">
<em>Early Bird</em> Valid on Friday, Saturday, and Sunday. $15 discount for booking before 1am January 3rd, 2011
</label></li>
</ul>
这可能发生在视图代码中。现在来看看表单中发生了什么
类订单(ModelForm):
定义初始化(self,*args,**kwargs):
self.tickets=kwargs.pop(“tickets”)
super(订单,self)。\uuuuuu初始化(*args,**kwargs)
选项=[(t.code,标记为安全(u'%s%s'(t.label,t.help)))
对于t-in-self.门票]
self.fields['ticket']=forms.ChoiceField(
选择=选择,
widget=forms.RadioSelect()
)
在您的示例中,您已经设置了一个id和label属性。我已经有了这两个属性,我希望添加第三个属性;帮助文本。如果你给我们看一些代码,我们可以提供更多帮助。现在,我不明白您试图实现的目标是什么,这是使用id
和label
属性无法实现的。我用更多信息和代码片段更新了问题,感谢您的关注。
<ul>
<li><label for="id_ticket_0">
<input type="radio" id="id_ticket_0" value="PARTTIME" name="ticket">
<em>Part Time</em> Valid on Friday Night and Saturday Only
</label></li>
<li><label for="id_ticket_1">
<input type="radio" id="id_ticket_1" value="DAYTIME" name="ticket">
<em>Casual</em> Valid on Saturday Only
</label></li>
<li><label for="id_ticket_2">
<input type="radio" id="id_ticket_2" value="EARLYBIRD" name="ticket">
<em>Early Bird</em> Valid on Friday, Saturday, and Sunday. $15 discount for booking before 1am January 3rd, 2011
</label></li>
</ul>
from django.utils.safestring import mark_safe
choices = (
('1', mark_safe(u'<em>One</em> | This is the first option. It is awesome')),
('2', mark_safe(u'<em>Two</em> | This is the second option. Good too.'))
)
from mymodule import ticket
# so lets create a few
fulltime = ticket('FULLTIME',160,'Full Time',
"Valid Monday to Friday inclusive")
parttime = ticket('PARTTIME',110,'Full Time',
"Valid outside of business hours only")
daytime = ticket('DAYTIME',70,'Day Time',
"Valid only on weekends and public holidays")
# and put them together in a list any way you like
available_tickets = [fulltime, parttime, daytime]
# now create the form
OrderForm(tickets=available_tickets)
class OrderForm(ModelForm):
def __init__(self, *args, **kwargs):
self.tickets = kwargs.pop('tickets')
super(OrderForm, self).__init__(*args, **kwargs)
choices = [(t.code, mark_safe(u'<em>%s</em> %s' % (t.label, t.help)))
for t in self.tickets]
self.fields['ticket'] = forms.ChoiceField(
choices = choices,
widget = forms.RadioSelect()
)