django的页面显示图片

我的django项目有一个Book类,我希望该类有一个book_image字段,并且前端页面显示book_image的图片,如下是具体做法:

1.首先,在models.py文件中定义Book类,并添加一个book_image字段。例如:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=200)
    author = models.CharField(max_length=200)
    book_image = models.ImageField(upload_to='book_images/', blank=True, null=True)

在这里,我们使用了ImageField来定义book_image字段。upload_to参数指定了上传的图像存储在服务器上的目录,blank=True和null=True表示该字段可以为空。

2.接下来,在settings.py文件中,确保MEDIA_ROOT和MEDIA_URL变量被正确设置。例如:

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

这将确保上传的图像被保存在项目根目录下的media目录中,并且在前端页面上正确显示。

3.在urls.py文件中添加一个URL模式,以便能够在浏览器中访问上传的图像。例如:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # your other URL patterns here
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

这将使Django能够正确地提供您上传的图像文件。

4.在您的视图函数或类中,将Book对象的book_image字段传递给您的模板。例如:

from django.shortcuts import render
from .models import Book

def book_detail(request, book_id):
    book = Book.objects.get(pk=book_id)
    return render(request, 'book_detail.html', {
    
    'book': book})

这将使您的模板能够访问您Book对象的book_image字段。

5.最后,在您的模板中,使用标签来显示book_image字段。例如:

{
    
    % extends 'base.html' %}

{
    
    % block content %}
  <h1>{
    
    {
    
     book.title }}</h1>
  <p>{
    
    {
    
     book.author }}</p>
  <img src="{
    
    { book.book_image.url }}" alt="{
    
    { book.title }} Cover">
{
    
    % endblock %}

在这里,我们使用{ { book.book_image.url }}来获取上传的图像文件的URL,并将其传递给标签的src属性。

猜你喜欢

转载自blog.csdn.net/liulanba/article/details/130516476
今日推荐