我希望以django形式实现以下内容,对于models.ImageField
:
<input type="file">
按钮(“选择文件”按钮)在我看来,这似乎是一种在表单中选择图像的正常工作流程,但我似乎没有找到任何完全有效的解决方案。我能找到的只涉及到几个部分的黑客攻击:
forms.FileField
的标准。我试过用:
class ImagePreviewWidget(Widget):
def render(self, name, value, attrs=None):
return mark_safe('<img src="/media/%s" width="100px"/>' % escape(value))
对于小部件,我在这样的表单中使用它:
class DesignCampaignForm(ModelForm):
brand_logo = FileField(widget=ImagePreviewWidget)
这是正确显示现有图像的预览,但我无法单击它来选择另一个文件,即使我不会更新预览。
这个简单的用例是否已有可用的解决方案?
我找不到完整的解决方案,所以我做了以下工作:
ClearableFileInput
,渲染图像和<input>
元素<input>
,以隐藏它<input>
元素,将<img>
包装在<label>
中并使用for
属性<input>
元素中的选择发生变化时,添加一些javascript来替换图像预览一个要点可以找到here。
在我的最终解决方案中(还没有在主旨中),我添加了一个按钮,用于何时尚未选择图像。
编辑:Gist仅适用于版本1.11.x之前的Django。
从那时起,class ClearableFileInput
就被摧毁了