繁体   English   中英

如何在 Django 中提供 static_files?

[英]How to serve static_files in django?

基本上,我正在练习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)

我的手机.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 和 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 %}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM