首页 > 解决方案 > 如何在 django 中提供 static_files?

问题描述

基本上,我正在实践一个 Django 的电子商务项目。有两种添加图像的方法。( 1 ) - 首先是有人手动添加照片,但我希望用户通过静态文件自动添加产品照片。

模型.py:

from django.db import models

# Create your models here.


class Mobile(models.Model):
    brand = models.CharField(max_length=30)
    price = models.IntegerField(default=1)
    color = models.CharField(max_length=30)
    screen_size = models.IntegerField(default=5)
    os = models.CharField(max_length=30, default='Samsung')

    def __unicode__(self):
        return 'This is a mobile'

    def get_price(self):
        return self.price


class MobileImage(models.Model):
    device = models.ForeignKey(Mobile, on_delete=models.CASCADE)
    image = models.ImageField(upload_to='media/images/')

    def __unicode__(self):
        return self.device


class Laptop(models.Model):
    brand = models.CharField(max_length=30)
    price = models.IntegerField(default=1)
    color = models.CharField(max_length=30)
    screen_size = models.IntegerField(default=5)
    os = models.CharField(max_length=30, default='Dell')

    def __str__(self):
        return self.brand

我的意见.py:

def mobile(request):
    mobiles = Mobile.objects.all()
    context = {
        'mobiles': mobiles
    }
    return render(request, 'device/mobile.html', context)


def laptop(request):
    laptops = Laptop.objects.all()
    context = {
        'laptops': laptops
     }
    return render(request, 'device/laptop.html', context)

我的mobile.html:

 {% extends 'device/base.html' %}

 {% load static %}
 {% block body %}
 <h1>Mobile!</h1>

 <!-- Table -->

 <table class="">
      <tr>
           <h3>Phones:</h3>
           <th>ID</th>
           <th>Model</th>
           <th>Price</th>
           <th>Color</th>
           <th>Screen Size</th>
           <th>OS</th>
           <th>Image</th>
        </tr>

               <body>
               {% for mobile in mobiles %}
                    <tr>
                        <td>{{ forloop.id }}</td>
                        <td>{{ mobile.brand }}</td>
                        <td>${{ mobile.price }}</td>
                        <td>{{ mobile.color }}</td>
                        <td>{{ mobile.screen_size }}</td>
                        <td>{{ mobile.os }}</td>
                        {% for item in mobile.mobileimage_set.all %}
                            <td><img src="{{ MEDIA_URL }}{{ item.image }}" alt="No Photo"></td>
                        {% endfor %}
                       </tr>
                {% endfor %}
               </tbody>

    </table>

  {% endblock %}

在第一张图片中,它显示了我的静态文件的路径。在第二张图片中,它显示了我面临的问题。

标签: pythondjangodjango-staticfiles

解决方案


所以,我在这里所做的基本上是从 MobileImage 类中删除图像字段并添加到 Mobile 类本身。原因很简单,因为我注意到您想使用外键来关联它,但在这种情况下看起来不可行。如果您有其他问题,请告诉我。 PS:您应该运行 Makemigrations 和 migrate 命令,因为数据库已被更改。

将您的 models.py 文件更改为此

class Mobile(models.Model):
    brand = models.CharField(max_length=30)
    price = models.IntegerField(default=1)
    color = models.CharField(max_length=30)
    screen_size = models.IntegerField(default=5)
    os = models.CharField(max_length=30, default='Samsung')
    image = models.ImageField(upload_to='media/images/')

class MobileImage(models.Model):
    device = models.ForeignKey(Mobile, on_delete=models.CASCADE)

将您的 views.py 文件更改为此

def mobile(request):
    mobiles = Mobile.objects.all()
    context = {
        'mobiles': mobiles
    }
    return render(request, 'device/mobile.html', context)

和你的模板到这个

   {% for mobile in mobiles %}
    <tr>
        <td>{{ forloop.id }}</td>
        <td>{{ mobile.brand }}</td>
        <td>${{ mobile.price }}</td>
        <td>{{ mobile.color }}</td>
        <td>{{ mobile.screen_size }}</td>
        <td>{{ mobile.os }}</td>
            <td><img src="{{ mobile.image.url }}" alt="No Photo"></td>
       </tr>
    {% endfor %}

推荐阅读