Django 中显示图片

在 Django 中显示图片的基本步骤包括:配置静态文件和媒体文件的处理、上传图片、以及在模板中显示图片。以下是详细步骤:

问题背景:

我在学习 Django 并在构建一个简单的网站,我尝试使用模板语言添加一些图片,但显示的结果是只有小的蓝色问号图标,而不是预期的图片。

以下是使用的模型定义:

python 复制代码
from django.db import models

class Galery(models.Model):
    title = models.CharField(max_length = 120)

    def __unicode__(self):
        return self.title

class Image(models.Model):
    galery = models.ForeignKey(Galery)
    name = models.CharField(max_length = 50, unique = True)
    picture = models.ImageField(upload_to='media')
    description = models.CharField(max_length = 500)
    materials = models.CharField(max_length = 150)

    def __unicode__(self):
        return self.name

在模板中试图显示图片:

html 复制代码
{%extends 'home/base.html'%}
{%load static%}
{%block body%}
<div class="col-lg-12">
    <h1 class="page-header">My Projects</h1>
</div>
{%if image%}    
    {%for n in image%}  
        <div class="col-lg-3 col-md-4 col-xs-6 thumb">
            <a class="thumbnail" href="">
                <img class="img-responsive" src="{% static 'media/{{n.image.url}}' %}">
            </a>
        </div>
    {%endfor%}
{%endif%}

{%endblock%}

在设置中配置了媒体文件路径:

python 复制代码
PROJECT_PATH = os.path.join(SETTINGS_DIR, os.pardir)
MEDIA_ROOT = os.path.join(PROJECT_PATH,'media')
TEMPLATE_DIRS = (
    TEMPLATE_PATH,
)
STATICFILES_DIRS = (
    STATIC_PATH,
)
STATIC_URL = '/static/'

MEDIA_URL = '/media/'

我按照教程设置,但我仍然无法在模板中正确显示图片。

解决方案:

  1. 检查 MEDIA_URL 和 MEDIA_ROOT 是否正确。MEDIA_URL 是用于访问媒体文件的 URL 前缀,而 MEDIA_ROOT 是媒体文件在服务器上的实际存储路径。确保它们的值是正确的,并且媒体文件已经上传到 MEDIA_ROOT 中。
  2. 检查是否设置了 staticfiles_dirs,这是用于查找静态文件的路径。确保 TEMPLATE_DIRS 中包含静态文件所在的路径。
  3. 确保在 urls.py 中正确地配置了媒体文件的服务。在 urlpatterns 中添加以下代码:
python 复制代码
if settings.DEBUG:
    urlpatterns += patterns(
        'django.views.static',
        (r'media/(?P<path>.*)',
        'serve',
        {'document_root': settings.MEDIA_ROOT}), )
  1. 确保已经收集静态文件。可以通过运行以下命令进行收集:

    python manage.py collectstatic

  2. 刷新浏览器并重新加载页面,检查图片是否正确显示。

代码示例:

python 复制代码
# models.py
from django.db import models

class Galery(models.Model):
    title = models.CharField(max_length = 120)

    def __unicode__(self):
        return self.title

class Image(models.Model):
    galery = models.ForeignKey(Galery)
    name = models.CharField(max_length = 50, unique = True)
    picture = models.ImageField(upload_to='media')
    description = models.CharField(max_length = 500)
    materials = models.CharField(max_length = 150)

    def __unicode__(self):
        return self.name

# settings.py
PROJECT_PATH = os.path.join(SETTINGS_DIR, os.pardir)
MEDIA_ROOT = os.path.join(PROJECT_PATH,'media')
TEMPLATE_DIRS = (
    TEMPLATE_PATH,
)
STATICFILES_DIRS = (
    STATIC_PATH,
)
STATIC_URL = '/static/'

MEDIA_URL = '/media/'

# urls.py
if settings.DEBUG:
    urlpatterns += patterns(
        'django.views.static',
        (r'media/(?P<path>.*)',
        'serve',
        {'document_root': settings.MEDIA_ROOT}), )

# template.html
{% for n in image %}  
    <div class="col-lg-3 col-md-4 col-xs-6 thumb">
        <a class="thumbnail" href="">
            <img class="img-responsive" src="{{ n.image.url }}">
        </a>
    </div>
{% endfor %}

通过上述步骤,你可以在 Django 项目中实现图片的上传和显示功能。主要步骤包括配置静态和媒体文件路径、创建上传表单和处理视图、配置 URL 路由以及创建模板来展示图片。

相关推荐
摇滚侠3 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
川石课堂软件测试3 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
2501_937767164 小时前
自建 SQL 数据库定时备份踩坑复盘与落地思路
数据库·sql
silvamux_5 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
I Am a robert girl7 小时前
从 GameHorizon 拆解多时间尺度游戏评测:数据管线、离线基准与在线回放的三层设计
数据库·游戏·多时间尺度·数据管线·游戏评测·离线基准·在线回放
躺柒7 小时前
读数据安全架构设计与实践17安全架构案例(下)
数据库·安全·零信任·安全架构·防火墙·无边界
SelectDB7 小时前
实时更新排错现场:导入了却查到旧数据,和 FINAL 越加越慢的两条路
大数据·数据库·数据分析
SelectDB8 小时前
拿 Planet 的账单一行行对下来,我总结出三个可自查的校验点
大数据·数据库·数据分析
SelectDB8 小时前
Apache Doris + Vane:让多模态数据进入业务分析
大数据·数据库·数据分析
pjj1985410 小时前
ClickHouse 与 Doris 数据库技术梳理:看懂分析型数据库
数据库·clickhouse