1

上传了一些照片,但我无法在模板中看到照片

我的模板

{% extends 'base.html' %}
{% load staticfiles %}

{% block content %}
  <div class="row ">
    <div class="col-md-8">
      <h1>{{ object.title }}</h1>
          {% if object.productimage_set.count > 0 %}
        <div>
            {% for img in object.productimage_set.all %}
            {{ img.image.file }}
            {{ img.image.url }}
        <img class='img-responsive' src='{{ img.image.url }}' />
        </div>
      {% endfor %}
        </div>
      {% endif %}
    <div class="lead">{{ object.description }}</div>
    </div>
  </div>

我的模型

class Product(models.Model):
    title = models.CharField(max_length=120)
    description = models.TextField(blank=True, null=True)
    price = models.DecimalField(decimal_places=2, max_digits=20)
    active = models.BooleanField(default=True)

def __unicode__(self):  # def __str__(self):
    return self.title

class ProductImage(models.Model):
    product = models.ForeignKey(Product)
    image = models.ImageField(upload_to='product/')

媒体设置

    STATIC_URL = '/static/'
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, "static", "my_static"),
    ]
    STATIC_ROOT =  os.path.join(BASE_DIR, "static", "static_root")
    STATIC_URL = '/media/media_root/'
    MEDIA_ROOT =  os.path.join(BASE_DIR, "static", "media_root")

我的网址

urlpatterns = [
 url(r'^contact/', views.contact, name='contact'),
 url(r'^$', views.ProductViewList.as_view(), name='ProductViewList'),
 url(r'^(?P<pk>\d+)/$', views.ProductDetailView.as_view(), name='Product_Detail'),]

我的文件夹结构

在此处输入图像描述

在模板{{ img.image.url }}中给出 -> product/mp3.jpg。但我仍然无法看到图像

控制台显示图像是从http://127.0.0.1:8080/product/1/product/mp3.jpg我猜想收集图像的 url 有一些问题但不确定

非常感谢任何帮助....在此先感谢

4

2 回答 2

2

这是 Django 的一些文档:https ://docs.djangoproject.com/en/1.9/howto/static-files/#serving-files-uploaded-by-a-user-during-development

我更喜欢将我的媒体文件与我的静态文件分开,因此在开发过程中我实际上将我的媒体文件存储在项目根目录中。以下片段使用项目根目录作为媒体位置,但static/media_root如果您希望保留当前位置,可以通过将其更改为轻松调整。

首先确保您已在 settings.py 文件中定义了媒体根目录:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

然后尝试将以下内容添加到项目的 urls.py 文件中:

from django.conf import settings


if settings.DEBUG:
    urlpatterns += patterns('', (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}))
于 2016-02-19T17:48:28.427 回答
2

如果没有,您应该将 MEDIA_URL 添加到您的 settings.py。

在您的情况下, MEDIA_URL 应该是media_root. 我的图片链接都有/media/....jpg。

此外,您可以指定 URL:

from django.conf import settings

if settings.DEBUG:
    # static files (images, css, javascript, etc.)
    urlpatterns += patterns('',
        (r'^media/(?P<path>.*)$', 'django.views.static.serve', {
        'document_root': settings.MEDIA_ROOT}))
于 2016-02-19T17:49:43.683 回答