【问题标题】:How to render the radio buttons without ul in django如何在 django 中呈现没有 ul 的单选按钮
【发布时间】:2013-05-07 12:28:49
【问题描述】:

forms.py

Date_Format = (
    ('0', ' dd / mm / yyyy'),
    ('1', 'mm / dd / yyyy'),
)    
Time_Format = (
    ('0', ' 12 hour AM / PM '),
    ('1', ' 24 hour '),
)
class SettingsForm(forms.ModelForm):
    date_format = forms.ChoiceField(widget=forms.RadioSelect(), choices=Date_Format)
    time_format = forms.ChoiceField(widget=forms.RadioSelect(), choices=Time_Format)

模板.py

更新:

                    {% for radio in SettingsForm.date_format %}
                    {{ radio.choice_label }}
                    <div class="select">{{ radio.tag }}</div>
                    {% endfor %}

上面的表单将单选按钮呈现在无序列表中,但我希望没有无序列表。我该怎么做?

【问题讨论】:

  • 正如documentation 所述,您可以在模板中迭代选择(参见 karthikr 的回答)或创建自己的小部件或小部件渲染方法。

标签: django django-forms django-templates


【解决方案1】:

您可以创建自定义渲染器:

from django import forms
from django.forms.widgets import RadioFieldRenderer
from django.shortcuts import render
from django.utils.html import format_html_join
from django.utils.encoding import force_text


class RadioFieldWithoutULRenderer(RadioFieldRenderer):

    def render(self):
        return format_html_join(
            '\n',
            '<li>{0}</li>',
            [(force_text(w), ) for w in self],
        )


CHOICES = (
    ('0', ' 12 hour AM / PM '),
    ('1', ' 24 hour '),
)


class MyForm(forms.Form):
    somefield = forms.ChoiceField(
        widget=forms.RadioSelect(renderer=RadioFieldWithoutULRenderer),
        choices=CHOICES)


def myview(request):
    return render(request, 'form.html', {'form': MyForm()})

【讨论】:

  • 是否可以像这样自定义模型形式
  • 是的,你可以继承forms.ModelForm
  • RadioFieldRenderer 在更高版本的 Django 中被移除,因此这将不再起作用。以下是有关如何绕过此问题的讨论链接:stackoverflow.com/questions/46517799/…
【解决方案2】:

您可以遍历模板中的RadioSelect

{% for choice in form.date_format %}
  {{ choice.choice_label }}
  <div class="select">{{ choice.tag }}</div> {# Or any other type you want. #}
{% endfor %}

【讨论】:

  • 我正在使用modelForm,单选按钮未在html中呈现。自定义后没有显示任何字段
  • 你能分享你的模板吗?
  • 这看起来不错。它应该可以工作 - 请参阅:docs.djangoproject.com/en/dev/ref/forms/widgets/…。可以重启服务器吗?
  • 在模板中,我将 SettingsForm 拼错为 settingsForm,所以它们没有变化,但我更改并尝试我收到此错误“渲染时捕获 TypeError:'BoundField' 对象不可迭代”
  • 你试过其他方法了吗??
猜你喜欢
  • 1970-01-01
  • 2012-05-01
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多