Загрузка кириллических файлов в Django
Добрый день. Я пишу ресурс для корпоративного портала. Столкнулся с такой проблемой, что после загрузки файлов с кириллицей, пытаюсь их скачать, а Django выдает ошибку пути urls 404 путь к файлу не найден. Подскажите, где я ошибаюсь
Мой models.py:
from django.db import models
from datetime import datetime
from django.contrib.auth.models import User
def user_directory_path(instance, filename):
return 'user_{0}/{1}'.format(instance.owner.id, instance.name)
class DirectoryItem(models.Model):
name = models.CharField(max_length=200, default="New Folder", blank=False)
owner = models.ForeignKey(User, on_delete=models.CASCADE)
# a parent folder of null/blank would indicate a root folder.
# A users root folder is created upon registration
date_created = models.DateTimeField(default=datetime.now)
is_recycled = models.BooleanField(default=False)
# auto_now: updates on changes. date_recycled will be last change
# (Improve - create custom save function)
date_recycled = models.DateTimeField(auto_now=True)
is_public = models.BooleanField(default=False)
is_shared = models.BooleanField(default=False)
class Meta:
abstract = True
class Folder(DirectoryItem):
parent_folder = models.ForeignKey(
"self", on_delete=models.CASCADE, blank=True, null=True)
def __str__(self):
return self.name
class File(DirectoryItem):
parent_folder = models.ForeignKey(Folder, on_delete=models.CASCADE)
file_source = models.FileField(upload_to=user_directory_path)
file_type = models.CharField(max_length=20)
def __str__(self):
return self.name
Мой views.py , функция, отвечающая за загрузку файла:
def folders(request, folder_id):
requested_folder_id = folder_id
cur_user_id = request.user.id
requested_folder = Folder.objects.get(id=requested_folder_id)
# Is it the users folder?
if (requested_folder.owner.id != cur_user_id):
# Does he own the root/some parent folder?
if (not confirmUserOwnedParent(requested_folder, cur_user_id)):
# Then he does not have access to it
raise PermissionDenied
# get all the children of the current_folder
folders = Folder.objects.filter(
parent_folder=requested_folder_id, is_recycled=False).order_by('name')
files = File.objects.filter(
parent_folder=requested_folder_id, is_recycled=False).order_by('name')
# breadcrumb trail
bc_trail = []
parent = requested_folder.parent_folder
while (parent):
bc_trail.insert(0, parent)
parent = parent.parent_folder
root_folder = Folder.objects.get(
name=request.user.username,
owner=request.user,
parent_folder__isnull=True
)
context = {
'folders': folders,
'files': files,
'root': root_folder,
'breadcrumbs': bc_trail,
'current': requested_folder
}
return render(request, 'myfiles/files.html', context)