首页 > 解决方案 > 如何将图像存储在 Django 的视图文件中

问题描述

我正在制作一个 Django 网站,我需要在其中显示用户选择的图像。这些是我做过的事情:

图像的 Html 形式:

<form action="" method="POST">
{% csrf_token %}
<div class="form-group">
            <label >Article Logo</label>
            <input type="file" class="btn btn-primary" name="article_image">
 </div>
 <input type="submit" class="btn btn-success">
 </form>

模型.py

class Content(models.Model):
        article_image = models.ImageField(upload_to = 'media', null=True)

视图.py

def submit_article(request):
        if request.method == 'POST':
             a_image = request.FILES['article_image']
             new_article.article_image = a_image
             new_article.save()

我已将以下代码添加到 settings.py 以指定媒体目录:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

将以下代码添加到网站的 urls.py 中:

urlpatterns = [
    path(r'admin/', admin.site.urls),
    url(r'', include('logio.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

该表单无法将图像添加到媒体文件夹。如果我通过管理面板添加图像,它可以工作。

提前致谢....

标签: django

解决方案


您需要添加enctype="multipart/form-data"到表单中,如下所示:

<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}

有关更多信息,请查看文档

只是一个建议,最好使用Django 表单来处理这个问题。例如,您可以有一个表格:

class ContentForm(forms.ModelForm):
     class Meta:
        model = Content
        fields = ['article_image']

然后通过上下文将此表单传递给模板并呈现它:

<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
  {{ form }}
  <input type="submit" value="submit'>
</form>

最后,在视图中处理验证:

def submit_article(request):
    if request.method == 'POST':
         form = ContentForm(request.POST, request.FILES)
         if form.is_valid():
            form.save()
            ...

推荐阅读