Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:显示模型字段中的图像?_Python_Django_Python 3.x_Django Models_Django Templates - Fatal编程技术网

Python Django:显示模型字段中的图像?

Python Django:显示模型字段中的图像?,python,django,python-3.x,django-models,django-templates,Python,Django,Python 3.x,Django Models,Django Templates,我无法显示图像。这应该很容易解决。我只是个傻瓜/ My models.py如下所示: import datetime from django.db import models from django.utils import timezone class Coin(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=100) ticker

我无法显示图像。这应该很容易解决。我只是个傻瓜/

My models.py如下所示:

import datetime

from django.db import models
from django.utils import timezone


class Coin(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100)
    ticker = models.CharField(max_length=5)
    logo = models.ImageField(upload_to='uploads/', verbose_name='image')
    website = models.URLField(max_length=200, default="https://example.com/")
    reddit = models.URLField(max_length=200, default="https://reddit.com/r/")
    twitter = models.URLField(max_length=200, default="https://twitter.com/")
    summary = models.CharField(max_length=500, blank=True)
    description = models.TextField()
    pub_date = models.DateTimeField('date published')

    def __str__(self):
        return self.ticker

    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)


class CoinImage(models.Model):
    coin = models.ForeignKey(Coin, default=None, related_name='images',
                             on_delete=models.CASCADE)
    image = models.ImageField(upload_to='static/uploads', verbose_name='image')
在my views.py中,我有:

from django.http import HttpResponse, Http404
from django.template import loader
from django.shortcuts import render

from .models import Coin


def index(request):
    latest_coins_list = Coin.objects.order_by('-pub_date')[:5]
    context = {'latest_coins_list': latest_coins_list}
    return render(request, 'coins/index.html', context)

def detail(request, coin_id):
    try:
        coin = Coin.objects.get(pk=coin_id)
    except Coin.DoesNotExist:
        raise Http404("Coin does not exist")
    return render(request, 'coins/detail.html', {'coin': coin})
我的主要URL.py是:

from django.contrib import admin
from django.urls import include, path
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
    path('coins/', include('coins.urls')),
    path('admin/', admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
from django.urls import path
from django.conf import settings
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('<int:coin_id>/', views.detail, name='detail'),
]
我的应用程序URL.py是:

from django.contrib import admin
from django.urls import include, path
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
    path('coins/', include('coins.urls')),
    path('admin/', admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
from django.urls import path
from django.conf import settings
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('<int:coin_id>/', views.detail, name='detail'),
]

在开发过程中,您可以从
media\u ROOT
为用户上传的媒体文件提供服务。这是保存用户上载文件的目录的绝对文件系统路径。在您的设置中,您应该提供:

# MEDIA_ROOT = os.path.join(BASE_DIR,'your_directory')
MEDIA_ROOT = os.path.join(BASE_DIR,'media') # media most of the time
,URL,用于处理从提供服务的媒体,用于管理存储的文件。如果设置为非空值,则必须以斜杠结尾。您需要将这些文件配置为在开发和生产环境中提供服务。将此添加到您的设置中

# MEDIA_URL = '/your_url/'
MEIDA_URL = '/media/' # most of the time
您还需要通过将以下代码段添加到根URL.py来完成此操作:

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
注意:此助手函数仅在调试中起作用

问题/建议

在这个字段中,不要将文件上传到
静态
目录,只需提供您的媒体目录,在这种情况下,它是
媒体

image = models.ImageField(upload_to='uploads/', verbose_name='image')
Django将自动在
媒体根目录中创建一个目录:“uploads”,即
媒体

因此,请访问您的所有图像和您的

# file.url 
{{ coin.logo.url }}

使用
{{coin.logo.url}
访问图像,但不确定这是否是唯一的问题。将你的
设置。媒体URL
设置。媒体ROOT
添加到你的问题中。我已经设置了静态URL和静态ROOT。这和media root是一样的,对吧?这不是关于一个bug,而是一些问题,在ImageField中你的
upload_to
,给我看这段代码Statist_url或static_root与之无关,我在OP中添加了settings.py。现在,当我在admin中上传一幅图像并单击它时,它会显示“Coin with ID”1/change/media/uploads/Screenshot_from 18-05-05-54-55.png“不存在。可能已删除?”这也是在detail.html上打印的内容。由于某些原因,仍然没有显示图像。您已经上载的文件没有正确的路径,因此请尝试上载其他文件注意:在这些设置配置之前,平台上已经存在的文件将不会显示,除非您手动更改它们的路径。我已尝试重新加载文件以及添加新文件,但结果相同。:/这让我快发疯了哈哈,应该很简单