我无法上传图片。
这是我的 models.py
mySurface
图片未上传至 ' post / static / images /'
这是上传图片的模板
class Post(models.Model):
author = models.ForeignKey('auth.User')
title = models.CharField(max_length=200)
text = models.TextField()
image = models.FileField(upload_to = 'post/static/images/' , null= True, blank= True)
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
答案 0 :(得分:2)
您的代码存在许多问题:
在您的模型中 - 使用该字段进行图片上传ImageField
(使用ImageField
您需要安装Pillow):
image = models.ImageField(upload_to = 'images/' , null= True, blank= True)
(您将图片上传到名为images
的MEDIA_ROOT文件夹的子文件夹中
同时将图片放入媒体文件夹 - 您必须创建一个,在 settings.py 文件夹中添加:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
要让django为您的媒体服务(仅用于开发!),您必须添加主要内容(来自您的项目目录,而不是来自您的应用程序文件夹) urls.py 文件:
from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
上传图片的简单表单示例:
<form action="{% url upload_pic %}" method="post" enctype="multipart/form-data">{% csrf_token %}
<input id="id_image" type="file" class="" name="image">
<input type="submit" value="Submit" />
</form>
其中url_upload_pic
是应该处理图像上传的(功能)视图。
答案 1 :(得分:1)
我认为也是一件好事。
MEDIA_ROOT和STATIC_ROOT必须具有不同的值。之前 STATIC_ROOT被引入,通常依赖或后备 MEDIA_ROOT也提供静态文件;但是,因为这可以 严重的安全隐患,有一个验证检查,以防止 它
https://docs.djangoproject.com/en/1.11/ref/settings/#media-root
您想要做的(在开发中)是遵循本指南: https://docs.djangoproject.com/en/1.11/howto/static-files/#serving-files-uploaded-by-a-user-during-development
在开发过程中,您可以从中提供用户上传的媒体文件 MEDIA_ROOT使用django.views.static.serve()视图。
这不适合生产使用!对于一些常见的部署 策略,请参阅部署静态文件。
例如,如果您的MEDIA_URL定义为/ media /,则可以执行此操作 将以下代码段添加到您的urls.py:
基本上,您将文件更新到MEDIA_ROOT中的某个位置,然后告诉django将它们视为静态处理。但是你不能直接上传到静态。