【问题标题】:Django: forms and custom templatesDjango:表单和自定义模板
【发布时间】:2011-10-05 22:15:57
【问题描述】:

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

我通过 django 文档阅读了很多,我发现了很多,但我不得不承认,我无法按照顺序将零碎的东西放在一起来做我需要做的事情。

现在,使用 CheckboxSelectMultiple 的 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>

对于其他类型的表单小部件,依此类推。这是我能想到的用他们给我的特定布局创建表单的唯一方法。

我实际上被困在这个问题上,我似乎无法将所有内容放在一起开始编写我的表单。 我该如何管理?如果你也有任何例子,那就太好了!否则,请为我指明正确的方向......遗憾的是,正如我之前所说,查看文档并没有真正帮助我

提前谢谢大家!

【问题讨论】:

  • 我还认为我可以使用包含标签来生成 html(并用自定义代码而不是 django 的表单填充它)但我不知道如何将该 html 绑定到 django 表单类,保留所有功能(错误、验证 ecc)

标签: django django-templates django-forms


【解决方案1】:

您应该继承 CheckboxSelectMultiple 类并覆盖渲染方法,如下所示:

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

查看原始 CheckboxSelectMultiple 来源,了解如何制作新方法的灵感。

然后你的信号覆盖在你的表单中

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

现在您所有的 MyCustomForm 都将使用您的特定小部件来处理其中的所有 CheckboxSelectMultiple。

【讨论】:

  • 谢谢,浏览 checkboxselectmultiple 的代码向我展示了我需要做什么!真的,再次感谢!
猜你喜欢
  • 2018-04-14
  • 2017-05-02
  • 1970-01-01
  • 2014-07-12
  • 2015-08-30
  • 2013-03-28
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
相关资源
最近更新 更多