【问题标题】:How to serve static_files in django?如何在 django 中提供 static_files?
【发布时间】:2020-10-20 03:15:20
【问题描述】:

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

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

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

【问题讨论】:

  • 您将媒体与静态文件混淆了。媒体用于上传内容,静态用于静态,例如 CSS、JS 和主题图像
  • 得到了你。那么解决方案是什么?
  • 我该如何解决这个问题?
  • 我的评论与问题无关,只是一个声明 - 通常您应该将它们分开。回到问题:看起来你没有静态/媒体文件的 url 处理程序。发布您的urls.py 可能会有所帮助
  • 也许吧。如何添加 url 处理程序?

标签: python django django-staticfiles


【解决方案1】:

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

【讨论】:

  • 什么都没发生,兄弟
【解决方案2】:

所以,我在这里所做的基本上是从 MobileImage 类中删除图像字段并添加到 Mobile 类本身。原因很简单,因为我注意到您想使用外键来关联它,但在这种情况下看起来不可行。如果您有其他问题,请告诉我。 P.S:您应该运行 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 %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 2021-06-06
    • 2011-11-29
    • 2015-07-04
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多