django:图片未加载

时间:2019-03-03 08:00:57

标签: django django-models django-templates

我需要在模板中显示图像。图像是从模型中获取的。我的models.py驻留在名为services的应用程序中:

class Car_model(models.Model):
    name = models.CharField (max_length = 25, blank=False)
    ...
    category = models.ForeignKey (Category, on_delete=models.CASCADE)
    photo = models.ImageField (upload_to ='static/images/models')

我在settings.py中添加了以下几行:

STATIC_ROOT = os.path.join(BASE_DIR, 'media')    # i added it later
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

我还在我的 project_name的 urls.py文件中添加了这一行:

from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

我正在尝试通过以下代码在模板中获取图像:

{% load static %}
  {% for c in ca %}
    <p><strong>{{ c.car_no }}</strong>--<em>{{ c.car_model }}</em>--{{ c.garage }}</p>
    <img src="{{ c.car_model.photo.url }}" height="200" />
    <form action="{%url 'booking' c.id c.garage.id %}" method="POST">
      {% csrf_token %}
      <input type="submit" name="the_selected_car" value="Select this car">
    </form>
{% endfor %}

但是无论我尝试什么,照片都不会显示。我尝试通过放置: + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)在我的services应用的urls.py中,但这没有帮助。

2 个答案:

答案 0 :(得分:0)

您没有在URLs.py中包含MEDIA网址

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

答案 1 :(得分:0)

您忘记在 settings.py 中添加 MEDIA_ROOT MEDIA_URL ,并在 urls.py 中加载媒体URL。

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

和urls.py

urlpatterns = [
 ........  

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

您可以在照片字段中重构您的upload_to

1。。如果要在static导演中上传图片

photo = models.ImageField (upload_to ='static/images/models')

并如下所示在MEDIA_ROOT中设置静态文件夹

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

2。。如果要在media导演中上传图片

由于您要存储上传的图像,因此建议您存储在不同的导演中,例如media, 如下更改您的字段。

photo = models.ImageField (upload_to ='media/images/car_model')

现在,所有与Car_Model相关的图像都将保存在media / images / car_model中 并在MEDIA_ROOT中设置媒体文件夹,如下所示MEDIA_ROOT

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