【问题标题】:Multiple flask_dropzone in one page一页中有多个烧瓶dropzone
【发布时间】:2019-04-17 16:56:23
【问题描述】:

我是新开发者。

我有多个步骤表单,我希望允许用户上传最多 2 个(例如 DROPZONE_MAX_FILE_SIZE= 3, PLOADED_PATH=os.path.join(base, 'doc Form'))

然后在表单的不同部分(步骤),我希望允许用户上传更多具有不同配置的文件(例如 DROPZONE_MAX_FILE_SIZE= 20, PLOADED_PATH=os.path.join(base, 'med'))

我尝试过的事情:

1 - 尝试在两个不同的 Div 中两次在相同的表单上插入 dropzone 并为每个包含不同的 URL 路由提供自定义选项但没有工作(仅当我删除其中一个时才有效)我总是收到错误 SECOND_PATH_URL_OR_FUNCTION is not defined

2 - 阅读此答案Multiple Dropzone in a single page 后,我已将 div 替换为 form 并添加了自定义选项,其中每个 dropzone 在烧瓶中都有自己的功能

如果我从应用配置中删除 DROPZONE_UPLOAD_ACTION='handle_upload' 并添加为自定义选项,我会在 chrome 的控制台上收到此错误 No URL provided.

当我添加其中一个 URL 时,它是唯一一个有机会工作的 URL,因为我收到第二个错误 handle_upload2 is not defined 其中 handle_upload2 只是原始函数的副本,该函数称为 handle_upload 我已添加它的 url在配置选项中。

似乎 custom_options 没有覆盖 app.config 详细信息

我很接近,但我不知道如何在同一页面中添加两个 URL,因此我可以运行一个函数脚本 onclick 并在 Ajax 中发送所有数据,就好像它们是一种形式一样。

flask 文件当前应用配置选项:

UPLOADED_PATH=os.path.join(basedir, 'uploads'),
# Flask-Dropzone config:
DROPZONE_ALLOWED_FILE_TYPE='image',
DROPZONE_MAX_FILE_SIZE=3,
DROPZONE_MAX_FILES=30,
DROPZONE_IN_FORM=True,
DROPZONE_UPLOAD_ON_CLICK=True,
DROPZONE_UPLOAD_ACTION='handle_upload',  # URL or endpoint
DROPZONE_UPLOAD_BTN_ID='uploadID',

Drop Zone 1 的自定义选项:

    {{ dropzone.config(custom_init='dz = this;document.getElementById("uploadID").addEventListener("click", function handler(e) {dz.processQueue();});',
                 custom_options='autoProcessQueue: false, addRemoveLinks: true, maxFiles: 2,DROPZONE_UPLOAD_ACTION:handle_upload,') }}

对于放置区 2:

{{ dropzone.config(custom_init='dz2 = this;document.getElementById("uploadID").addEventListener("click", function handler(e) {dz2.processQueue();});',
                     custom_options='autoProcessQueue: false, addRemoveLinks: true, maxFiles: 2,DROPZONE_UPLOAD_ACTION:handle_upload2,') }}

【问题讨论】:

标签: python-3.x flask file-upload dropzone.js flask-uploads


【解决方案1】:

Flask-drop-zone 文档说: 您可能希望对不同页面上的多个放置区域使用不同的配置,在这种情况下,您可以将特定的关键字参数直接传递给dropzone.config()

关键字参数应该以这种方式映射相应的燃烧变量:

DROPZONE_DEFAULT_MESSAGE –> default_message DROPZONE_TIMEOUT -> 超时 DROPZONE_ALLOWED_FILE_TYPE –> allowed_file_type 等等 示例:

{{ dropzone.config(max_files=10, timeout=10000, default_message='Drop here!') }}

您传递的关键字参数将覆盖相应的配置。


所以,我认为您不能对同一页面中的多个放置区进行不同的配置。

但您可以在同一页面中为不同的拖放区发送两个 URL:

{{ dropzone.create(action= url_for('product.first_upload')) }}
{{ dropzone.create(action= url_for('product.second_upload')) }}

@product.route('/first_upload', methods=['POST'])
def first_upload():
    #do something

@product.route('/second_upload', methods=['POST'])
def second_upload():
    #do something

此外,您可以将参数发送到上传函数,以区分放置区域:

@product.route('/upload_images/<string:upload_for><int:id>', methods=['POST'])
def upload_images(upload_for, id):
    if upload_for == "Something like Cat Image":
        #do something with id passed

【讨论】:

  • 非常感谢,你知道 2 天前我放弃了 flask-dropzone 并用 dropzon.js 替换它。它更难,但我现在可以做尽可能多的配置。
猜你喜欢
  • 2020-01-27
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
  • 2017-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多