首页 > 解决方案 > 在 django 中上传图像时“无法从 * 派生文件名”

问题描述

我正在 django 中构建图像上传模型,并使用 upload_to 函数来命名路径。但它向我展示了这个错误

from django.utils import timezone
from django.contrib.auth import get_user_model

# Create your models here.


def user_directory_path(instance, filename):
    return 'images/{0}/'.format(filename)


class Category(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name


class Images(models.Model):
    User = get_user_model()

    category = models.ForeignKey(Category, on_delete=models.PROTECT, default=1)
    title = models.CharField(max_length=250)
    alt = models.TextField(null=True)
    image = models.ImageField(
        max_length=255,upload_to=user_directory_path, default='posts/default.jpg')
    slug = models.SlugField(max_length=250, unique_for_date='created')
    created = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(
        User, on_delete=models.PROTECT, related_name='author') ```   

标签: pythondjango

解决方案


def user_directory_path(instance, filename):
    return 'images/{0}/'.format(filename)

在这里,您将文件名“转换”为目录名。如果上传的文件名包含非法字符,您将收到错误消息。

尽量不要使用文件名,或者至少在返回之前删除所有可能的非法字符。

请注意,此函数应返回目录的路径,而不是文件的路径,因此您不需要文件名。


推荐阅读