即使使用媒体 url 和媒体根,Django 模板图像也不显示

Django Template Image not displaying even with media url and media root

静态图片显示正常。 html 中未显示媒体文件夹中的文件。我尝试以各种方式设置 media_url 但没有成功。我通过 django 管理面板上传了图片。产品名称显示正常。 img.url 显示 /media/p2.jpg

models.py

class Product(models.Model):
    name = CharField(("Name"),max_length=256,blank=False)
    title_img = models.ImageField(null=True, blank=True)

settings.py

PROJECT_ROOT = (os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT  =   os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(PROJECT_ROOT), "media_root")

urls.py

urlpatterns = [
        path('', ProductList.as_view() , name="product"),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

template.html

{{p.name}}
<img src="{{p.title_img.url}}">

只显示名字,不显示图片。在控制台中,我得到

"GET /media/p2.jpg HTTP/1.1" 404 2690

根据文档:https://docs.djangoproject.com/en/3.1/howto/static-files/#serving-static-files-during-development and https://docs.djangoproject.com/en/3.1/howto/static-files/#serving-files-uploaded-by-a-user-during-development

  1. 它应该只用于开发目的,
  2. settings.DEBUG必须设置为True,
  3. 仅当 url 是本地
  4. 时才有效

在你的情况下,1 和 3 接缝没问题,但你的 DEBUG 设置是否设置为 True?

根据文档:https://docs.djangoproject.com/fr/3.1/ref/contrib/staticfiles/#runserver,您可以使用参数 --insecure 运行服务器,这样您仍然可以在 DEBUG 设置为 False 的情况下提供静态文件或媒体文件。

我更改了一些设置并能够解决它。可能错误是我正在更改 project_root/products/urls.pyproject_root/urls.py。我所做的总体改变:

在主要 urls.py 中,添加了这些

urlpatterns = [
        path('', ProductList.as_view() , name="product"),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

已更改 settings.py

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