РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
453 of 818 menu

Виджет FileInput

Виджет FileInput в Django используется для отображения поля ввода файлов в HTML-формах. Он генерирует элемент <input type="file">, который позволяет пользователям выбирать файлы с локального компьютера для загрузки на сервер. Виджет автоматически обрабатывает отправку файлов через формы с атрибутом enctype="multipart/form-data". Основной параметр виджета - это атрибуты HTML-элемента, которые можно передать через аргумент attrs.

Синтаксис

from django import forms class MyForm(forms.Form): file_field = forms.FileField(widget=forms.FileInput(attrs={'class': 'my-class'}))

Пример . Базовое использование

Создадим простую форму для загрузки файлов с использованием виджета FileInput:

from django import forms class UploadForm(forms.Form): file = forms.FileField( label='Выберите файл', widget=forms.FileInput(attrs={ 'class': 'form-control', 'accept': '.pdf,.doc,.docx' }) ) description = forms.CharField( max_length=200, required=False, widget=forms.TextInput(attrs={'class': 'form-control'}) )

Пример . Обработка загруженного файла

Рассмотрим полный пример обработки формы с файлом в представлении:

from django.shortcuts import render from django.http import HttpResponse from django import forms class UploadForm(forms.Form): file = forms.FileField(widget=forms.FileInput) def upload_file(request): if request.method == 'POST': form = UploadForm(request.POST, request.FILES) if form.is_valid(): file = request.FILES['file'] # Обработка файла file_name = file.name file_size = file.size content = file.read() return HttpResponse(f"File: {file_name}, Size: {file_size}") else: form = UploadForm() return render(request, 'upload.html', {'form': form})

Пример . Настройка атрибутов

Виджет FileInput позволяет настроить различные атрибуты HTML-элемента для улучшения пользовательского опыта:

from django import forms class DocumentForm(forms.Form): document = forms.FileField( widget=forms.FileInput(attrs={ 'class': 'file-input', 'id': 'doc-upload', 'accept': '.pdf,.txt,.md', 'multiple': 'multiple', 'required': 'required' }) ) # Использование в шаблоне form = DocumentForm() # {{ form.document }} выведет: # <input type="file" name="document" class="file-input" # id="doc-upload" accept=".pdf,.txt,.md" # multiple="multiple" required="required">

Пример . Работа с моделями

Использование виджета FileInput в формах на основе моделей:

from django.db import models from django import forms class Document(models.Model): title = models.CharField(max_length=100) file = models.FileField(upload_to='documents/') created_at = models.DateTimeField(auto_now_add=True) class DocumentForm(forms.ModelForm): class Meta: model = Document fields = ['title', 'file'] widgets = { 'file': forms.FileInput(attrs={ 'class': 'form-control-file', 'accept': '.pdf,.doc,.docx' }), } # В представлении def upload_document(request): if request.method == 'POST': form = DocumentForm(request.POST, request.FILES) if form.is_valid(): document = form.save() return HttpResponse(f"Document saved: {document.title}") else: form = DocumentForm() return render(request, 'upload_doc.html', {'form': form})

Пример . Множественная загрузка

Настройка виджета для загрузки нескольких файлов одновременно:

from django import forms class MultipleUploadForm(forms.Form): files = forms.FileField( widget=forms.FileInput(attrs={'multiple': 'multiple'}), label='Выберите несколько файлов' ) # В представлении def upload_multiple(request): if request.method == 'POST': form = MultipleUploadForm(request.POST, request.FILES) if form.is_valid(): files = request.FILES.getlist('files') file_names = [f.name for f in files] message = f"Uploaded files: {', '.join(file_names)}" return HttpResponse(message) else: form = MultipleUploadForm() return render(request, 'upload_multiple.html', {'form': form})

Смотрите также

  • виджет ClearableFileInput,
    который добавляет чекбокс для очистки поля файла
  • виджет TextInput,
    который создает текстовое поле ввода
  • виджет PasswordInput,
    который создает поле для ввода пароля
  • виджет CheckboxInput,
    который создает чекбокс для формы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить