2013-07-26 244 views
1

我试图让Django的RadioSelect小部件呈现水平。我发现下面的SO后,我认为已经解决了这个问题:Align radio buttons horizontally in django forms,它基本上是各国使用自定义渲染器,如下所示:自定义RadioSelect渲染

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

class MyForm(ModelForm): 
    select=forms.ChoiceField(choices=CHOICES, widget=forms.RadioSelect(renderer=HorizontalRadioRenderer 

但是,当我实现这一点,我仍然得到无线电选择按钮呈现垂直。这是一个截图。 enter image description here

这是我的表单的seriois问题。任何想法为什么它不能正常工作?如果它很重要,表单将呈现在表格中。

感谢

UPDATE:

好吧,我已经试过别的东西。该渲染器现在是:

def render(self): 
    internal=''.join(['<span id="radio">%s</span>' % w for w in self]) 
    return mark_safe(u'%s' %internal) 

,我已经添加了CSS来我的样式表:

#radio{ 
    width: 100px; 
    float: left; 
} 

这使得该选项框内嵌和看起来很大。但现在有一个更大的问题。正如我在上面的屏幕截图所看到的,我有2个选择,是和N/A。现在,如果我点击yes或N/A,则会选择N/A。我认为这可能是因为他们都在同一个身份证的跨度,但如果我将其更改为class="radio"发生同样的事情。如果我从CSS中删除float: left,那么它正常工作(但是,当然,不会水平显示)。任何想法是什么造成这个?

+1

由于表格单元格的存在,最有可能只是折叠。你应该看看HTML并找出发生了什么。你猜这里太多东西了。渲染器在工作吗?如果是,那剩下的是什么? –

+0

@ Yuji'Tomita'Tomita看起来并不像表格单元格......我只是单独呈现它,而且它也在做同样的事情。渲染器是“工作”(我的意思是,如果我更改渲染器,它的影响被应用),但似乎没有做我想做的事情。更多信息会有帮助吗?如果是这样,什么? –

回答

1

哇:好的。

不知道为什么让他们使用相同的ID或类,导致他们表现为相同的无线电盒,但我想出了一个解决方案。

的渲染器现在内容如下:

def render(self): 
    internal = ''.join(['<li>%s</li>' % w for w in self]) 
    return mark_safe(u'<div id="radio"><ul>%s</ul></div>' %internal) 

这使得在未排序列表中的无线盒,一个div用无线电装置的ID所包围。

然后我有CSS:

#radio ul li label{ 
    display:inline; 
} 

这使他们在一条线上。好,易于。不知道为什么另一种方法不起作用,当它听起来像另一个SO用户时。