如何在 Django 中使用 HTML 输入类型文件作为 FileField 类型?

Posted

技术标签:

【中文标题】如何在 Django 中使用 HTML 输入类型文件作为 FileField 类型?【英文标题】:How to use HTML input type file as FileField type in Django? 【发布时间】:2015-09-16 23:03:40 【问题描述】:

我的 DJango 模板中有以下代码,其中 div 和输入类型文件的样式相同,因此当您单击图像时,将显示上传窗口。

<div class="prof" style="background:url(https://c1.staticflickr.com/3/2669/5830411257_b21bf9e931_b.jpg);background-size:cover">
<input type="file" id="uploadpic" class="uploadpic" />
</div>

演示:

http://jsfiddle.net/sathish_opr/s54uxkx9/

我的要求是我能不能把这个模板的输入类型文件用作Django模型中的FileField,这样这个输入文件的html标签就可以访问upload_to了。

我正在寻找一些类似的工作模型,但还没有找到。 这怎么可能?有什么建议吗?

在我的 Models.py

class td_profpic(models.Model):
id = models.CharField(max_length=300,blank=True)
propicpath = models.FileField(upload_to=get_upload_file_name)
class Meta:
    managed = False
    db_table = "td_profpic"

def get_upload_file_name(instance,filename):
return "%s_%s" % (str(time()).replace('.','_'),filename)

在这种情况下,如何将模板的输入类型文件标签与模型字段(FileField - propicpath)相关联?

【问题讨论】:

【参考方案1】:

您可以为此使用 Django ModelForm。 为您的模型“td_profpic”创建一个表单:

from django.forms import ModelForm
# import your model from your application

Class td_profpicForm(forms.Form):
model= td_profpic

然后在您的视图中导入此表单:from forms import td_profpicForm 并通过创建视图将其呈现为模板并将此表单作为上下文发送。 在 Django 模板中,将此表单呈现为 form.as_p 或 form.as_table ,它会使用您的字段自动为您创建一个表单。 那么您就不需要为自己创建自定义字段了。

【讨论】:

以上是关于如何在 Django 中使用 HTML 输入类型文件作为 FileField 类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用javascript在文本区域中设置输入类型文本中的值? [复制]

从 Django 表单中写入输入类型的值

Django:为啥我放置在 Django Summernote 中的文本会在我的 HTML 模板中显示 HTML 标记?

向 Django 添加文本区域的正确方法是啥?

HTML / Javascript:如何提交输入并使用提交/添加更多按钮填充文本区域

如何在 Django 的 fieldset.html 中调整网格