2011-05-09 74 views
9

HI以django形式水平对齐单选按钮

我想水平对齐单选按钮。默认情况下,django表单以垂直格式显示。

feature_type = forms.TypedChoiceField(choices = formfields.FeatureType, widget = forms.RadioSelect) 

是否有任何特殊参数可以通过单选按钮对齐?

在此先感谢

+2

我觉得这是比Django的一个CSS问题。你也许可以添加一个类到单选按钮,并说float:left;在你的CSS单选按钮类。 – 2011-05-09 10:36:48

+1

我用Google搜索了一下,发现有一个链接无法工作。 https://wikis.utexas.edu/display/~bm6432/Django-Modifying+RadioSelect+Widget+to+have+horizo​​ntal+buttons。我会尝试添加CSS,并会告诉你它是否修复。谢谢geekam – vkrams 2011-05-09 11:01:35

回答

22

多数民众赞成在RadioField的行为。如果你想让它呈现水平,创建水平渲染器,喜欢的东西如下:

from django.utils.safestring import mark_safe 

class HorizontalRadioRenderer(forms.RadioSelect.renderer): 
    def render(self): 
    return mark_safe(u'\n'.join([u'%s\n' % w for w in self])) 


class ApprovalForm(forms.Form): 
    approval = forms.ChoiceField(choices=APPROVAL_CHOICES, 
       initial=0, 
       widget=forms.RadioSelect(renderer=HorizontalRadioRenderer), 
           ) 
+0

嘿lakshman,当我执行上面的代码,它得到错误'mark_safe'没有定义。如果你能帮助这将是agreat帮助 – vkrams 2011-05-10 05:29:42

+0

你应该导入从Django.templates – 2011-05-10 06:27:19

+1

冷却其做工精细拉克斯曼。感谢您的帮助:-)为mark_safe工作,我已经导入:从'进口django.utils.safestring mark_safe' – vkrams 2011-05-10 10:56:08

1

修改forms.RadioSelect:

class HorizontalRadioSelect(forms.RadioSelect): 

    def __init__(self, *args, **kwargs): 
     super().__init__(*args, **kwargs) 

     css_style = 'style="display: inline-block; margin-right: 10px;"' 

     self.renderer.inner_html = '<li ' + css_style + '>{choice_value}{sub_widgets}</li>' 

与Python的3.4与工作的非标准的管理Django的1.10 enter image description here

和Django的套装(http://djangosuit.com/)(它使用Bootstrap`s 2款)

enter image description here

尚未测试Django-grappelli。

1

根据the Django docs“ATTRS”是含有HTML属性要对所渲染的外集件组的字典。

考虑到这一点简单的基于表单解决方案是类似以下内容:

feature_type = forms.TypedChoiceField(
    choices = formfields.FeatureType, 
    widget = forms.RadioSelect(attrs={ 
     'display': 'inline-block' 
    }) 
)