即使使用媒体 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
- 它应该只用于开发目的,
- settings.DEBUG必须设置为True,
- 仅当 url 是本地
时才有效
在你的情况下,1 和 3 接缝没问题,但你的 DEBUG 设置是否设置为 True?
根据文档:https://docs.djangoproject.com/fr/3.1/ref/contrib/staticfiles/#runserver,您可以使用参数 --insecure 运行服务器,这样您仍然可以在 DEBUG 设置为 False 的情况下提供静态文件或媒体文件。
我更改了一些设置并能够解决它。可能错误是我正在更改 project_root/products/urls.py
或 project_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/'
静态图片显示正常。 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
- 它应该只用于开发目的,
- settings.DEBUG必须设置为True,
- 仅当 url 是本地 时才有效
在你的情况下,1 和 3 接缝没问题,但你的 DEBUG 设置是否设置为 True?
根据文档:https://docs.djangoproject.com/fr/3.1/ref/contrib/staticfiles/#runserver,您可以使用参数 --insecure 运行服务器,这样您仍然可以在 DEBUG 设置为 False 的情况下提供静态文件或媒体文件。
我更改了一些设置并能够解决它。可能错误是我正在更改 project_root/products/urls.py
或 project_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/'