war*_*ia1 3 django django-forms django-widget
我有一个profile_picture=ImageField字段设置为初始值的表单。它正在使用ClearableFileInput小部件。我需要在模板中自定义表单,所以我不能简单地使用{{ form.profile_picture}}. 如何拆分字段元素并获得如下所示的内容:
{{ with picture=form.profile_picture }}
{{ picture.label_tag }}
<a href="{{ picture.url }}">
<img src="{{ picture.url }}">
</a>
{{ picture.clear-picture }}
Run Code Online (Sandbox Code Playgroud)
{{ picture.clear-picture }}应该在哪里生成复选框以删除旧图片
@vadimchin 的答案是正确的,但它需要对 Django 的新版本(2.0 及更高版本)进行一些修改,因为ClearableFileInput类已更改。
您必须通过在模板目录中创建另一个模板来覆盖 , 的template_name属性ClearableFileInput。例如:
class CustomClearableFileInput(ClearableFileInput):
template_name = 'widgets/customclearablefileinput.html'
Run Code Online (Sandbox Code Playgroud)
并用需要的代码填充customclearablefileinput.html,根据需要修改模板的原始代码。
您还必须在 settings.py 文件中进行更改,以便 Django 允许您覆盖项目模板目录中的小部件模板:添加'django.forms'到INSTALLED_APPS,然后添加以下代码:
FORM_RENDERER = 'django.forms.renderers.TemplatesSetting'
Run Code Online (Sandbox Code Playgroud)
小智 4
您可以覆盖ClearableFileInput
class CustomClearableFileInput(ClearableFileInput):
template_with_initial = (
'%(initial_text)s: <a href="%(initial_url)s">%(initial)s</a> '
'%(clear_template)s<br />%(input_text)s: %(input)s'
)
template_with_clear = '%(clear)s <label for="%(clear_checkbox_id)s">%(clear_checkbox_label)s</label>'
Run Code Online (Sandbox Code Playgroud)
看render方法,
并在覆盖后,设置
class ExForm(forms.Form):
image = ImageField(widget=CustomClearableFileInput)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5453 次 |
| 最近记录: |