Я новый разработчик.
У меня есть форма с несколькими шагами, и я хочу разрешить пользователям загружать максимум 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, как если бы они были одной формой.
Параметры конфигурации текущего приложения в файле 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,') }}
я запомню это





В документации Flask-drop-zone говорится:
Возможно, вы захотите использовать другую конфигурацию для нескольких областей перетаскивания на разных страницах, в этом случае вы можете напрямую передать определенные аргументы ключевого слова в dropzone.config().
Аргументы ключевого слова должны отображать соответствующую переменную пожара следующим образом:
DROPZONE_DEFAULT_MESSAGE -> default_message
DROPZONE_TIMEOUT -> тайм-аут
DROPZONE_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. это сложнее, но я могу сделать столько конфигураций, сколько захочу.
Пожалуйста, прочтите При каких обстоятельствах я могу добавить к моему вопросу «срочно» или другие похожие фразы, чтобы получить более быстрые ответы? - вкратце, это не идеальный способ обращения к волонтерам и, вероятно, контрпродуктивно для получения ответов. Пожалуйста, воздержитесь от добавления этого к своим вопросам.