📜  django 在管理页面中显示图像 - Python (1)

📅  最后修改于: 2023-12-03 15:14:44.026000             🧑  作者: Mango

Django 在管理页面中显示图像

在 Django 的管理页面中显示图像可以为用户提供更好的可视化体验。本文将会介绍如何使 Django 管理页面可以上传和显示图像。

安装依赖库

首先,需要安装以下依赖库:Pillow 和 django-imagekit。

pip install Pillow
pip install django-imagekit
修改 model

假设我们有一个 Product 模型,现在我们需要添加一个 image 字段。

from django.db import models
from imagekit.models import ProcessedImageField


class Product(models.Model):
    name = models.CharField(max_length=200)
    image = ProcessedImageField(upload_to='products',
                                 format='JPEG',
                                 options={'quality': 60},
                                 null=True, blank=True)

ProcessedImageField 来自于 django-imagekit。上述代码在 Product 模型中添加了一个名为 image 的字段,其类型为 ProcessedImageField,并指定了上传到 products 目录中,格式为 JPEG,质量为 60null=True 表示该字段可为 nullblank=True 表示该字段可为空。

修改 admin

我们需要在 admin.py 中为 Product 模型注册一个自定义的表单组件,以允许在管理页面中上传图像。

from django.contrib import admin
from imagekit.admin import AdminThumbnail
from .models import Product


class ProductAdmin(admin.ModelAdmin):
    list_display = ('name', 'admin_thumbnail')

    admin_thumbnail = AdminThumbnail(image_field='image_thumbnail')

admin.site.register(Product, ProductAdmin)

AdminThumbnail 用于在管理页面中显示缩略图,其 image_field 参数指定了缩略图字段名称。我们将 admin_thumbnail 添加到了 list_display 中,以便在管理页面中显示。最后,我们通过调用 register 函数使 ProductAdminProduct 模型的管理页面。

修改 template

我们需要在 change_form.html 模板中添加一些代码,以便在管理页面中上传图像。

{% extends "admin/change_form.html" %}

{% block field_sets %}
{{ block.super }}
<fieldset class="module aligned {{ form.image.thumbnail_html_class }}">
    <div class="form-row">
        <div class="field-box">
            <label{% if form.image.label_suffix %} for="{{ form.image.id_for_label }}"{% endif %}>{{ form.image.label }}</label>
            <div class="field-box">
                {{ form.image }}
                {% if form.image.thumbnail_html %}
                <div class="{{ form.image.thumbnail_html_class }}">{{ form.image.thumbnail_html }}</div>
                {% endif %}
            </div>
            {% if form.image.help_text %}
            <p class="help">{{ form.image.help_text|safe }}</p>
            {% endif %}
        </div>
    </div>
</fieldset>
{% endblock %}
结束语

现在,在 Django 的管理页面中就能上传和显示图像了。这将增强用户的交互体验,并提高用户的参与度。