【问题标题】:django: Images are not loadingdjango:图像未加载
【发布时间】:2019-07-24 19:00:28
【问题描述】:

我需要在模板中显示图像。图像是从模型中获取的。我的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's 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 中,但这没有帮助。

【问题讨论】:

    标签: django django-models django-templates


    【解决方案1】:

    您忘记在 settings.py 中添加 MEDIA_ROOT 和 MEDIA_URL 并在 urls.py 中加载媒体网址

    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导演上传图片

    由于您正在存储上传的图像,我建议存储在不同的导演中,例如媒体,上传 如下更改您的字段。

    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')
    

    【讨论】:

    • 第二种方法更好。
    • {% load static %} 模板标签是否用于加载 CSS、JS 而非媒体文件?
    • 我按照你的建议做了,更新了'media/images/models'的路径,将文件从static文件夹移到了media文件夹。在settings.py 中定义MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 和MEDIA_URL = '/media/'。在 urls.py 中添加了 + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 和 urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)。但是在打开页面时我仍然收到此错误 "GET /media/static/images/models/nissan-frontier-2.jpg HTTP/1.1" 404 1873。
    • 但是当我像这样硬编码网址时:http://127.0.0.1:8000/media/images/profile-photos/SoloCharacter.jpg,它正在显示!
    • /static/ 是从哪里来的"GET /media/static/images/models/nissan-frontier-2.jpg HTTP/1.1" 404 1873,我认为问题出在那儿!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-01-23
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 2021-12-09
      相关资源
      最近更新 更多