当前位置: 首页 > 面试题库 >

Django小部件覆盖模板

濮阳原
2023-03-14
问题内容

我是django的新人。

我想创建一个自定义窗口小部件。

forms.py:

from project.widgets import MultiChoiceFilterWidget

class CustomSearchForm(FacetedSearchForm):
    TEST_COLORS = [
        u"Blau", u"Rot", u"Gelb"
    ]

    color = forms.MultipleChoiceField(
        label=_("Color"), choices=[(x, x) for x in TEST_COLORS],
        widget=MultiChoiceFilterWidget, required=False)

widget.py:

class MultiChoiceFilterWidget(forms.widgets.CheckboxSelectMultiple):
    template_name = 'project/widgets/filter.html'
    option_template_name = 'ptoject/widgets/filter_option.html'

project / widgets / filter.html:

 <h1>TEST</h1>

但是它不会呈现新模板,而是仍然呈现旧方法。

你能给我一些提示吗?


问题答案:

Django版本 <1.11:

小部件必须实现该render方法才能呈现不同的模板:

from django.utils.safestring import mark_safe
from django.template.loader import render_to_string

class MultiChoiceFilterWidget(forms.widgets.CheckboxSelectMultiple):
    template_name = 'project/widgets/filter.html'

    def render(self, data):
        ...
        Do stuff with data
        ...
        return mark_safe(render_to_string(self.template_name))

Django 1.11版:

在渲染器的文档中,我们可以找到以下内容:

Django 1.11的新功能:

在旧版本中,小部件是使用Python渲染的。本文档中描述的所有API都是新的。

通过查看小部件的源代码,特别是Input小部件如何扩展Widget类,我们可以看到您只需要按以下方式自定义小部件:

class MultiChoiceFilterWidget(forms.widgets.CheckboxSelectMultiple):
    template_name = 'project/widgets/filter.html'

这是您已经拥有的。



 类似资料:
  • 问题内容: 我有一个自定义TagField表单字段。 如上所示,它使用TextInput表单字段小部件。但是在管理员中,我希望使用Textarea小部件来显示它。为此,存在钩子,但在这种情况下不起作用。 管理员声明为: 这对表单字段窗口小部件没有影响,并且仍使用TextInput小部件呈现。 问题答案: django管理员对其许多字段使用自定义窗口小部件。覆盖字段的方法是创建一个供ModelAdm

  • 问题内容: 在保存模型之前,我需要重新调整图片大小。但是,如何检查是否添加了新图片或仅更新了说明,以便每次保存模型时都可以跳过重新缩放? 我只想在加载新图像或更新图像时重新缩放,而在更新说明时不想要。 问题答案: 一些想法: 不确定是否可以在所有伪自动django工具中正常运行(例如:ModelForm,contrib.admin等)。

  • 问题内容: 保存模型之前,我需要重新调整图片大小。但是,如何检查是否添加了新图片或仅更新了说明,以便每次保存模型时都可以跳过重新缩放? 我只想在加载新图像或更新图像时重新缩放,而在描述更新时不想要。 问题答案: 一些想法: 不知道它是否可以在所有伪自动django工具中正常运行(例如:ModelForm,contrib.admin等)。

  • 问题内容: 如果要覆盖django中应用程序随附的模板(在app / templates / app /中),请在另一个目录中创建相同名称的模板,模板加载器会在应用程序的模板目录之前检查该模板。如果您只想覆盖模板的某些块,则还必须复制整个模板广告,更改该块,这实际上不是很干。 有人知道一种方法来覆盖原始模板,同时扩展它,以便您只需要覆盖要更改的特定块吗?(这样做是在不更改模板名称的情况下进行的,因

  • 问题内容: 在保存模型之前,我需要重新调整图片大小。但是,如何检查是否添加了新图片或仅更新了说明,以便每次保存模型时都可以跳过重新缩放? 我只想在加载新图像或更新图像时重新缩放,而在更新说明时不想要。 问题答案: 一些想法: 不确定是否可以在所有伪自动django工具中正常运行(例如:ModelForm,contrib.admin等)。

  • 我正在使用Blueprint和jQueryUI/jQuery1.11。1与。Net MVC在我正在从事的项目中。 这是模式对话框的代码,我在布局页面的部分视图中看到了该对话框。提交表单时,我有以下代码显示弹出窗口: 我需要用class="jquery_elem"包装jQuery添加到页面底部的div,因为我选择了jQuery UI的作用域为这个选择器。我使用以下CSS的覆盖: 但是,当我单击“提交