加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何使用Django FileFields在模板中显示当前文件

发布时间:2020-12-20 11:14:13 所属栏目:Python 来源:网络整理
导读:我有点卡住,我一直在使用Django一段时间了,但实际上我似乎无法找到这个东西.这很奇怪,因为它应该是一件简单的事情. 我一直在谷歌搜索,似乎无法找到解决方案,这可能是因为它是一件简单的事情. 问题是,我有一个ModelForm,它有一个FileField,当我用模型实例渲染
我有点卡住,我一直在使用Django一段时间了,但实际上我似乎无法找到这个东西.这很奇怪,因为它应该是一件简单的事情.

我一直在谷歌搜索,似乎无法找到解决方案,这可能是因为它是一件简单的事情.

问题是,我有一个ModelForm,它有一个FileField,当我用模型实例渲染这个表单,并且该对象包含一个上传文件时,我想显示当前文件,(就像管理员一样),但我似乎无法做到这一点.

这些技术都不起作用:

{{ form.as_p }}
{{ field.label_tag?}}

我一直在管理员模板中搜索,但似乎无法找到魔法.该表单正确呈现对象的所有其他数据

问题2是由于在使用对象实例呈现更改表单时未显示上载文件,因此表单在我尝试保存时无法验证,因为它对先前上载的文件一无所知.

那么如何处理Django中的更改表单中的文件字段,如何显示当前上载的文件以及如何验证表单.

解决方法

你没有好好环顾四周,解决方案是contrib / admin / widgets.py中的一个自定义小部件,即这个:

class AdminFileWidget(forms.FileInput):
    """
    A FileField Widget that shows its current value if it has one.
    """
    def __init__(self,attrs={}):
        super(AdminFileWidget,self).__init__(attrs)

    def render(self,name,value,attrs=None):
        output = []
        if value and hasattr(value,"url"):
            output.append('%s <a target="_blank" href="%s">%s</a> <br />%s ' % 
                (_('Currently:'),value.url,_('Change:')))
        output.append(super(AdminFileWidget,self).render(name,attrs))
        return mark_safe(u''.join(output))

您可以使用widgets meta option的ModelForms来使用此(或改编版本).

据我所知,你的第二个问题根本就不存在,即使没有更好的小部件,也要知道它是否在使用自定义小部件后仍然存在.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读