Поле FilePathField
Поле FilePathField в Django представляет собой поле формы, которое позволяет пользователю выбрать файл из определенной директории на сервере. В отличие от FileField, которое загружает новый файл, FilePathField предлагает выбор из уже существующих файлов. Поле принимает такие параметры как 'path' - обязательный путь к директории, 'match' - регулярное выражение для фильтрации файлов, 'recursive' - разрешает поиск в поддиректориях и другие.
Синтаксис
from django import forms
class YourForm(forms.Form):
file = forms.FilePathField(path='/path/to/directory/', **options)
Основные параметры
Поле FilePathField принимает следующие ключевые параметры:
from django import forms
class DocumentForm(forms.Form):
document = forms.FilePathField(
path='/home/user/documents/',
recursive=True,
match=r'\.txt$',
allow_files=True,
allow_folders=False,
required=False
)
Пример . Использование в форме
Создадим форму для выбора конфигурационного файла из директории '/etc/myapp/':
from django import forms
class ConfigForm(forms.Form):
config_file = forms.FilePathField(
path='/etc/myapp/',
match=r'\.conf$',
recursive=False,
label='Configuration file',
help_text='Select a .conf file from the config directory'
)
Пример . Обработка данных формы
Рассмотрим, как обработать данные из формы с FilePathField во view:
from django.shortcuts import render
from .forms import ConfigForm
def select_config(request):
res = None
if request.method == 'POST':
form = ConfigForm(request.POST)
if form.is_valid():
selected_file = form.cleaned_data['config_file']
res = f"Selected file: {selected_file}"
else:
form = ConfigForm()
return render(request, 'config.html', {'form': form, 'result': res})
Результат при успешной отправке формы:
"Selected file: /etc/myapp/settings.conf"
Пример . С фильтрацией по расширению
Используем параметр match для отображения только изображений в формате 'png' или 'jpg':
from django import forms
class ImageSelectForm(forms.Form):
image = forms.FilePathField(
path='/media/images/',
match=r'\.(png|jpg|jpeg)$',
recursive=True,
label='Select an image'
)
Пример . С разрешением выбора папок
Разрешим пользователю выбирать как файлы, так и папки, установив параметры allow_files и allow_folders:
from django import forms
class FolderSelectForm(forms.Form):
path = forms.FilePathField(
path='/home/user/projects/',
allow_files=False,
allow_folders=True,
recursive=True,
label='Select project folder'
)
Пример . Использование в модели
Поле FilePathField также можно использовать в моделях Django:
from django.db import models
class Theme(models.Model):
name = models.CharField(max_length=100)
template_file = models.FilePathField(
path='/templates/themes/',
match=r'\.html$',
recursive=True
)
def __str__(self):
return self.name
Смотрите также
-
поле
FileField,
которое используется для загрузки файлов на сервер -
поле
ImageField,
которое предназначено для загрузки изображений -
поле
ChoiceField,
которое предоставляет выбор из заранее заданных вариантов -
поле
ModelChoiceField,
которое позволяет выбирать объекты из модели базы данных