在模板中自定义django ImageField标记

时间:2016-10-27 08:48:10

标签: django django-templates

我有一个允许您上传图像的表单,但我想知道是否可以自定义Django生成的标记。

在模型中,它被创建为ImageField:

logo = models.ImageField(blank=True, null=True)

在模板中,我使用

创建“上传”表单字段
{{ form.logo }}

这是生成的标记:

Currently: <a href="/media/dog.jpg">dog.jpg</a>
<input id="logo-clear_id" name="logo-clear" type="checkbox">
<label for="logo-clear_id">Clear</label>
<br>Change: <input id="id_logo" name="logo" type="file">

我想知道我是否可以通过进一步向下钻取来更改该标记,以便我可以嵌套复选框以清除其标签内的图像。我还想使用我自己的标记来分隔选项以清除表单字段和上传新表单的选项。但是,我找不到任何关于如何执行此操作的文档。我试过输出

{{ logo.logo-clear }}

直接但这会引发错误。

1 个答案:

答案 0 :(得分:0)

解决方案是创建我的forms.py中使用的小部件的自定义版本:https://docs.djangoproject.com/en/1.10/_modules/django/forms/widgets/#ClearableFileInput

from django.forms.widgets import ClearableFileInput

class CustomImageFieldWidget(ClearableFileInput):
        template_with_clear = '<label for="%(clear_checkbox_id)s">%(clear)s %(clear_checkbox_label)s</label>'

class OrganisationProfileForm(OrganisationCreateForm):

    class Meta(OrganisationCreateForm.Meta):
        widgets = {
            'logo': CustomImageFieldWidget,
        }