我希望将django表单小部件radioselect呈现到一个表中,而不是一个ul列表中。标签在第一行,单选按钮在第二行。每个按钮对应一个单元格。例如:
-------------------------------
| label 1 | label 2 | label 3 |
-------------------------------
| O | O | O |
-------------------------------
我看过默认的seems小部件,但是渲染函数看起来太复杂了,它调用许多不同的类来完成渲染的每一部分。
有没有人有关于如何做到这一点的例子,或者可以提供一个简单的解决方案?
发布于 2011-02-17 00:18:04
您需要子类化django.forms.widgets.RadioFieldRenderer并覆盖它的render方法。然后,在表单中声明字段时,指定小部件的自定义渲染器
class MyForm(forms.ModelForm):
my_field = forms.TypedChoiceField(choices=some_choices,
label=u"bla",
widget=forms.RadioSelect(renderer=MyCustomRenderer))
发布于 2011-07-25 03:12:14
只是想补充一下贝雷斯·博邦的回答
class MyForm(forms.ModelForm):
my_field = forms.TypedChoiceField(choices=some_choices,
label=u"bla",
widget=forms.RadioSelect(renderer=MyCustomRenderer))
自定义渲染器将如下所示:
from django import forms
from django.forms.widgets import RadioFieldRenderer
from django.utils.encoding import force_unicode
from django.utils.safestring import mark_safe
class MyCustomRenderer( RadioFieldRenderer ):
def render( self ):
"""Outputs a series of <td></td> fields for this set of radio fields."""
return( mark_safe( u''.join( [ u'<td>%s</td>' % force_unicode(w.tag()) for w in self ] )))
在本例中,我不希望它旁边的单选框的名称,所以我使用"force_unicode(w.tag())“,如果您想要它旁边的名称,只需直接呈现对象,如"force_unicode(w)”
我希望这对你有帮助!
发布于 2011-03-29 14:33:24
您还可以使用django-uni-form,并使用divs而不是表。
https://stackoverflow.com/questions/5018586
复制相似问题