Множественная колба_дзона на одной странице - PullRequest
0 голосов
/ 14 ноября 2018

Я новый разработчик.

У меня есть форма с несколькими шагами, и я хочу разрешить пользователям загружать максимум 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 - попытался вставить dropzone в одни и те же формы дважды в двух разных Div и предоставил настраиваемые параметры для каждого, включая разные маршруты URL, но не работал (работает только при удалении одного из них). Я всегда получаю ошибку SECOND_PATH_URL_OR_FUNCTION is not defined

2 - после прочтения этого ответа Несколько Dropzone на одной странице Я заменил div на форму и добавил пользовательские опции, где у каждой dropzone есть своя функция в колбе

Если я удалил DROPZONE_UPLOAD_ACTION='handle_upload' из конфигурации приложения и добавил в качестве пользовательской опции, я получаю эту ошибку на консоли chrome No URL provided.

Когда я добавляю один из URL-адресов, он единственный, у которого есть шанс работать, потому что я получаю сообщение об ошибке для второго handle_upload2 is not defined, где handle_upload2 - просто дубликат исходной функции, которая называется handle_upload, и я добавил ее URL-адрес. в настройках конфигурации.

Кажется, что custom_options не перекрывает детали app.config

Я близок, но не знаю, как добавить оба URL на одной странице, чтобы я мог запустить один скрипт функции onclick и отправить все данные в Ajax, как если бы они были одной формой.

Параметры текущей настройки файла колбы:

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,') }}

1 Ответ

0 голосов
/ 17 ноября 2018

В документации Flask-drop-zone сказано: Возможно, вы захотите использовать разные конфигурации для нескольких областей перетаскивания на разных страницах, в этом случае вы можете передать конкретные аргументы ключевого слова непосредственно в dropzone.config().

Аргументы ключевых слов должны отображать соответствующую переменную пожара следующим образом:

DROPZONE_DEFAULT_MESSAGE -> default_message DROPZONE_TIMEOUT -> timeout DROPZONE_ALLOWED_FILE_TYPE -> enabled_file_type и т. д., например:

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

Ключевое словоаргумент, который вы передадите, перезапишет соответствующие конфигурации.


Итак, я думаю, что вы не можете создать другую конфигурацию для многих drop-зон на одной странице.

, но вы можете отправить два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
...