2011-05-09 75 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' 
    }) 
)