django MEDIA_ROOT和MEDIA_URL模板

时间:2014-11-22 07:05:10

标签: python django

模型看起来像

class Cars(models.Model):
    name = models.CharFidle(max_length=255)
    price = models.DecimalField(max_digits=5,decimal_places=2)
    photo = models.ImageField(upload_to='images/cars')
    def __unicode__(self):
        return self.name

设置

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

但是当我在像这样的模板中使用它时

{% for car in cars %}
        <li>{{ car.name }}</li>
        <li>{{ car.price }}</li>
        <a>{{ car.photo }}</a>
        <img src="{{ car.photo.url }}"/>
    {% endfor %}

我无法获得图片,这是怎么回事?

任何帮助我的人都会很棒

3 个答案:

答案 0 :(得分:2)

这里有一些事情可以发生:

  1. 您正在运行尚未设置为提供静态媒体的非开发Web服务器。此处的解决方案将根据您正在运行的Web服务器而有所不同。
  2. 您正在运行开发Web服务器但尚未设置static serving。为此,我将以下内容添加到您的根urls.py文件中:
  3.   urlpatterns = [
          # ... the rest of your URLconf goes here ...
      ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    
    1. 您的MEDIA_ROOT目录中存在权限问题。在这种情况下,我确保您的Web服务器可以读取您的MEDIA_ROOT目录。

答案 1 :(得分:1)

从您的settings.py我假设您已在基本目录中创建了一个媒体文件夹。如果你有,那么你是对的。我认为问题出在您的模板中。

试试这个:

<img src="/static/{{car.photo}}" width="100" height="100" />

不要忘记在扩展基础之后在模板顶部加入{% load staticfiles %} ..你准备好了......

答案 2 :(得分:1)

urlpatterns = [
  # ... the rest of your URLconf goes here ..
  ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

将此添加到我的根urls.py,然后记住 root urls.py