Django 总是用一些完全没有必要的行为来困扰我。我
我有一个源自 Django 模型的媒体文章模板。除了图像之外,一切都很棒,而且看起来很棒。
前一分钟他们还在场,下一分钟 Django 需要一副新的眼镜处方,因为它突然决定看不到我设置的目录中公然存在的图像。
这是我完整的可复制示例,看看是否有人能弄清楚为什么 Django 决定不显示图像:
#models.py
from django.db import models
import uuid
# Create your models here.
....
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
article_image = models.ImageField(upload_to='media/assets')
....
在我的
views.py
中,我有以下内容:
def details(request, uuid):
articles = MediaModule.objects.all().values()
article = get_object_or_404(MediaModule, uuid=uuid)
title = article.article_headline
return render(request, 'media-article.html', {'article': article, 'title':title, 'articles':articles})
文件目录如下:
Root|
|- media
|- template
| - media-article.html
|- media
| - assets
| - image.jpg
#media-article.html
<img src="{{article.article_image}}" alt="{{article.article_image}}"/>
为什么 Django 会想“啊哈,图像在那里!”,然后说“实际上,我要故意假装图像不存在,因为我现在会很难了”
为什么要这么做? Django 决定不显示图像的可能原因是什么?
为什么?
只是为什么?
除此之外,为什么 Django 认为适合复制目录中的图像并向其附加大量随机字母和数字?
.url
[Django-doc] 来获取媒体 URL,你在这里得到的是 filename,但这并不是因为你有相对于媒体目录的文件名,所以网络服务器可以提供该文件:
<img src="{{ article.article_image.url }}" alt="{{ article.article_image }}"/>
在 Django 中,您可以在调试模式下提供媒体文件,方法是:
# root urls.py
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# …
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
在生产中,您应该配置 Nginx、Apache 等 Web 服务器来提供媒体文件。