Django:显示带有媒体的上传图像

时间:2018-10-16 09:16:08

标签: django

我想在模板中显示每个对象的uploaded picture。我遇到了一个问题,因为点击mediapicture url路径有误。

我的模型中有

class Publication(models.Model):
    ...
    cover = models.ImageField(upload_to='media/', verbose_name=_('cover page'))

然后,在我的设置部分:

MEDIA_URL = 'media/'
MEDIA_ROOT = BASE_DIR + '/myapp/'

现在,在我的模板文件中,我显示如下图片:

{% if item.cover %}
    <td>
        <a href="{{item.cover.url}}" target="_blank">
            <img class="glyphicon glyphicon-home" src="{{item.cover.url}}" alt="{{item.cover}}">
        </a>
    </td>
{% else %}
    <td></td>
{% endif %}

enter image description here

模板页面网址为:http://localhost:8000/crud/publication/list/ 当我单击图片链接时,我得到:http://localhost:8000/crud/publication/list/media/media/couverture_qZQKLED.jpg

这是错误的,我应该得到:

http://localhost:8000/media/couverture_qZQKLED.jpg

然后,我希望仅用glyphicon替换可见元素。

你能帮我吗?

在我的urls.py文件中,我有:

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

2 个答案:

答案 0 :(得分:2)

您已在图像字段中添加了upload_to ='media /',因此它将在您的媒体根目录内另外创建一个文件夹。 Django已经在图像路径中进行了媒体播放。完整的路径成为 mediaurl + folderpath

cover = models.ImageField(upload_to='other_folder_name', verbose_name=_('cover page'))

MEDIA_URL = '/media/'

因为它采用相对路径,而不以/

开头
<a href="{{item.cover.url}}" target="_blank">
        <span class="glyphicon glyphicon-home" alt="{{item.cover}}"></span>
</a>

答案 1 :(得分:1)

在settings.py中正确配置媒体文件

# Media files, uploaded by user
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

模板

<a href="{{item.cover.url}}" target="_blank">
    <!-- An alt tag in span makes no sense, so you can use title tag if you want. -->
    <span class="glyphicon glyphicon-home" title="{{item}}"></span>
    <!-- OR show item's str inside span -->
    <span class="glyphicon glyphicon-home">{{item}}</span>
</a>