如何在Django中提供static_files?

问题描述

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

models.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

我的views.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 %}

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

解决方法

{{ item.image }}替换为以下代码{{ item.image.url }}

,

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

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

AMD

将您的views.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)

您的模板与此

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...