Django:表单和自定义模板

Django:表单和自定义模板,django,django-templates,django-forms,Django,Django Templates,Django Forms,基本问题:我需要为django表单创建真正的定制模板。就这样。我习惯于根据django的输出为表单设置样式。这次不同了,html/css模板已经完成了(在我被录用前几个月),我无法修改它,所以我需要django准确地输出html代码 我通过django docs读了很多书,发现了很多,但我必须承认,我不能按顺序把零碎的东西放在一起去做我需要做的事情 现在,使用复选框SelectMultiple,html输出如下: <ul> <li><input type='c

基本问题:我需要为django表单创建真正的定制模板。就这样。我习惯于根据django的输出为表单设置样式。这次不同了,html/css模板已经完成了(在我被录用前几个月),我无法修改它,所以我需要django准确地输出html代码

我通过django docs读了很多书,发现了很多,但我必须承认,我不能按顺序把零碎的东西放在一起去做我需要做的事情

现在,使用复选框SelectMultiple,html输出如下:

<ul>
   <li><input type='checkbox' ...></li>
   ...
</ul>
  • ...
我实际上需要做的是创建类似CustomCheckboxSelectMultiple的东西,以便准确地输出此模板:

<ul class="list">
    <li class="list-item"><input class="checkbox" type="checkbox" id="..." /><label class="label" for="">...</label></li>
...
</ul>
  • ...
等等,用于其他类型的表单小部件。这是我能想到的用他们给我的特殊布局创建表单的唯一方法

事实上,我被困在这个问题上了,我似乎不能把所有的东西都放在一起,开始编写我的表单。 我该怎么办?如果你也有任何例子,那就太好了!否则,请告诉我正确的方向。。。可悲的是,正如我之前所说的,查看文档并没有真正帮助我


提前谢谢大家

您应该将复选框SelectMultiple类子类化,并覆盖render方法,如中所示:

class CustomCheckboxSelectMultiple (CheckboxSelectMultiple):
    """
    A custom CheckboxSelectMultiple Widget that render specific html
    """
    def __init__(self, attrs={}):
        super(CustomCheckboxSelectMultiple, self).__init__(attrs)

    def render(self, name, value, attrs=None):
        #Here the custom code
有关如何制作新方法的灵感,请参阅原始复选框SelectMultiple source

在那之后,你的信号将以你的形式覆盖

class MyCustomForm(forms.Form):
    formfield_overrides = {
        models.CheckboxSelectMultiple : {'widget': CustomCheckboxSelectMultiple }
    }

现在,您所有的MyCustomForm都将使用特定的小部件来处理其中的所有复选框SelectMultiple。

我还认为我可以使用包含标记来生成html(并用自定义代码而不是django的表单填充它),但我不知道如何将html绑定到django表单类,以保留所有功能(错误,验证ecc)谢谢,浏览checkboxselectmultiple的代码让我明白了我需要做什么!真的,再次感谢!