【问题标题】:how to use html5 with django forms?如何在 django 表单中使用 html5?
【发布时间】:2012-04-29 06:23:08
【问题描述】:

我想用这个sn-p

# extra.py in yourproject/app/

from django.db.models import FileField
from django.forms import forms
from django.template.defaultfilters import filesizeformat
from django.utils.translation import ugettext_lazy as _

class ContentTypeRestrictedFileField(FileField):
    """
    Same as FileField, but you can specify:
        * content_types - list containing allowed content_types. Example: ['application/pdf', 'image/jpeg']
        * max_upload_size - a number indicating the maximum file size allowed for upload.
            2.5MB - 2621440
            5MB - 5242880
            10MB - 10485760
            20MB - 20971520
            50MB - 5242880
            100MB 104857600
            250MB - 214958080
            500MB - 429916160
    """
    def __init__(self, *args, **kwargs):
        self.content_types = kwargs.pop("content_types")
        self.max_upload_size = kwargs.pop("max_upload_size")

        super(ContentTypeRestrictedFileField, self).__init__(*args, **kwargs)

    def clean(self, *args, **kwargs):
        data = super(ContentTypeRestrictedFileField, self).clean(*args, **kwargs)

        file = data.file
        content_type = file.content_type

        if content_type in self.content_types:
            if file._size > self.max_upload_size:
                raise forms.ValidationError(_('Please keep filesize under %s. Current filesize %s') % (filesizeformat(self.max_upload_size), filesizeformat(file._size)))
        else:
            raise forms.ValidationError(_('Filetype not supported.'))

        return data

有了这个sn-p

// fileInput is a HTMLInputElement: <input type="file" multiple id="myfileinput">
var fileInput = document.getElementById("myfileinput");
// files is a FileList object (simliar to NodeList)
var files = fileInput.files;
for (var i = 0; i < files.length; i++)
{
    alert(files[i].name + " has a size of " + files[i].size + " Bytes");
}

所以我可以使用 html5 检查文件的大小,如何将这 2 个 sn-ps 合并为 1 个?我还找到了一个 java sn-p 上传视频并检查大小,但我找不到任何关于如何实现它的文档。我不能使用 javascript 因为我不能信任客户端

【问题讨论】:

  • 请缩短您的问题,使其易于阅读,并且清楚地作为一件具体的事情。删除所有与引号无关的内容。
  • @agf mikko 的回复让我很生气,我生气的时候说话太多来表达我的愤怒,我现在编辑了这个问题

标签: javascript python django html django-forms


【解决方案1】:

根据 django 的文件输入小部件为该字段创建一个小部件。将第二个 sn-p 中的 JS 添加到该小部件的输出中。并在渲染创建时将 max_upload_size 的值从字段传递给小部件。

【讨论】:

    猜你喜欢
    • 2011-07-23
    • 2014-10-17
    • 2011-09-09
    • 2019-12-06
    • 2021-08-08
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多