【问题标题】:How to store SVG files in Django model?如何在 Django 模型中存储 SVG 文件?
【发布时间】:2019-08-06 06:44:24
【问题描述】:

我有一个简单的 Django 模板,它允许用户从系统输入图像。它应该只接受 JPEG、JPG、PNG 和 SVG 文件。前三个似乎运作良好。但是,SVG 不会被上传。相反,它会发送一条错误消息,说明:'上传有效图像。您上传的文件不是图像或损坏的图像'

如何将 SVG 文件存储到我的数据库模型中?

您可以在下面查看我当前的代码:

models.py

from django.db import models
import os
from PIL import Image
from datetime import date
import datetime

def get_directory_path(instance, filename):
    file_extension = os.path.splitext(filename)
    today = date.today()
    t = datetime.datetime.now() 
    day, month, year = today.day, today.month, today.year
    hour, minutes, seconds = t.hour, t.minute, t.second
    if file_extension[1] in ['.jpg','.png','.jpeg','.svg']:
        filename = str(day) + str(month) + str(year) + str(hour) + str(minutes) + str(seconds) + '.png'
        dir = 'media'
    else:
        dir = 'others'
    path = '{0}/{1}'.format(dir, filename)
    return path

# Create your models here.
class Image(models.Model):
    image = models.ImageField(upload_to = get_directory_path, default = 'media/sample.png')
    created_date = models.DateTimeField(auto_now = True)

    def __str__(self):
        return str(self.id)

forms.py:

from django import forms

from myapp.models import Image

class ImageForm(forms.ModelForm):
"""Image upload form"""
    class Meta:
        model = Image
        exclude = ('created_date',)

插入图像.html

{% load staticfiles %}
<!DOCTYPE html>
<html>
<head>
    <title> Insert an image </title>
</head>
<body>

    <h1> Please upload an image below </h1>

    <form method="POST" enctype="multipart/form-data">
        {% csrf_token %}
        {{form.as_p}}
        <button type="submit"> Submit </button>
    </form>

    <p> Required format: PNG, JPEG, JPG, SVG </p>

</body>
</html>

【问题讨论】:

  • 为什么不使用文件域呢?
  • 和ImageField()一样吗?
  • ImageField 只接受图像,而 FileField 接受所有格式。如果你不想要 FileField 那么这个答案会对你有所帮助stackoverflow.com/a/38010444/8966274
  • 我可以接受任何仅限制我使用 SVG、PNG、JPG 和 JPEG 的选项。另外,我想通过在用户上传 docx.、.pdf 等格式时声明“上传图像文件”来提醒 html 页面中的用户。如何创建该错误消息并将其显示在我的 html 页面中?
  • 如果要使用FileField,又想限制允许的格式,可以使用FileExtensionValidator docs.djangoproject.com/en/3.0/ref/validators/…

标签: django svg


【解决方案1】:

这就是我的解决方法(普通文件上传,SVG只是一个实现细节):

class About(models.Model):
    icon = models.FileField(upload_to='about/', null=True, blank=True, default=None)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 2016-02-11
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多