簡體   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