django图像上传到路径未显示

时间:2017-12-29 14:31:07

标签: python django

我有一个应用程序,我上传图像,图像上传到一个特定的目录,但上传后工作正常如果我注意点击图像网址我得到一个错误,说 The current URL, media/gallery/2017/12/28/230-256.png, didn't match any of these并且图片未显示在浏览器html中 尽管我在设置

中定义了媒体路径,但下面是我的模型和视图

Models.py

class Gallery(models.Model):
    name = models.CharField(max_length=400, db_index=True)
    image = models.ImageField(upload_to='gallery/%Y/%m/%d', blank=True)

    class Meta:
        ordering = ('name',)

    def __str__(self):
        return self.image.url

Views.py

def index(request):
    gallery = Gallery.objects.all()
    context = {
        'gallery': gallery,
        }
    template = 'gallery.html'
    return render(request, template, context)

HTML

{% if gallery.image %}
           <div><a href="{{ gallery.image.url }}" title="{{gallery.name}}"><img src="{{ gallery.image.url }}"></a></div>
           {% endif %}

2 个答案:

答案 0 :(得分:0)

你的HTML必须是这样的:

{% if gallery.image %}
    <div><a href="{{ MEDIA_URL }}{{ gallery.image.url }}" title="{{gallery.name}}"><img src="{{ MEDIA_URL }}{{ gallery.image.url }}"></a></div>
{% endif %}
应在settings.py中配置

MEDIA_URL。这应该设置为您为MEDIA_ROOT中存储的文件提供服务的基本URL。

图像字段的URL属性仅存储图像的相对URL。

答案 1 :(得分:0)

在开发过程中,在项目urls.py中必须添加

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [

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

这将使您的上传文件可供应用程序访问。

在生产服务器上,最好是网络服务器本身(apache,nginx,..)可以到达文件上传的位置,您可以在其他答案中找到如何配置它(here对于nginx,here用于apache