python - 如何在 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 %}
在第一张图片中,它显示了我的静态文件的路径。在第二张图片中,它显示了我面临的问题。
解决方案
所以,我在这里所做的基本上是从 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 %}
推荐阅读
- ios - Flutter firebase_messaging 从未在 iOS 上调用过后台处理程序?
- php - 如何从 PHP 中数据库 mysql 的 echo Table 生成的输入表单中获取特定值?
- python - 重复输入值并显示奇数的总数和平均值,直到输入的数字
- node.js - 我收到此错误,错误:监听 EADDRINUSE:地址已在使用 :::5002,抛出 er;// 未处理的“错误”事件
- c - 关闭管道的写端不会向其他进程发送 EOF
- html - 如何将手风琴按钮的向下箭头放在左侧
- python - python中的微分方程系统
- java - 如何从android studio中动态添加的EditTexts将数据发送到另一个活动?
- windows - 使用从 AWS System Manager 触发的 Powershell 将新服务器添加到 DFS
- python - RuntimeError: shape '[1, 1, 399194]' 对于大小为 798388 的输入无效