在Django模板中使用静态文件

时间:2017-09-01 23:34:29

标签: python django django-templates

我试图让我的媒体目录中的文件出现在HTML模板上。我正在使用" Tango和Django"预订作为教程。

这是我的settings.py

MEDIA_DIR = os.path.join(BASE_DIR, 'media')
MEDIA_ROOT = MEDIA_DIR
MEDIA_URL = '/media/'

以下是views.py

  def about(request):

    return render(request, 'rango/about.html', )

我的about.html模板:

<!DOCTYPE html>
{%load staticfiles%}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>About</title>
</head>
<body>
<h1>This is the about page</h1>
<img src="{{MEDIA_URL}} {{cat.jpg}}"
     alt="cats are funny"/>
<div>
    <a href="/rango/"> Index </a>
</div>
</body>
</html>

我知道我必须遗漏一些非常明显的东西,但不能为我的生活找到它!

2 个答案:

答案 0 :(得分:2)

不推荐使用{{MEDIA_URL}}标记。请改用{% get_media_prefix %}标记。

<img src="{% get_media_prefix %}cat.jpg" alt="cats are funny"/>

来自文档:

  

get_static_prefix类似,get_media_prefix使用媒体前缀MEDIA_URL填充模板变量。

呈现时,src属性将等同于/media/cat.jpg。您可能需要考虑在STATIC_ROOT中使用settings.py,而使用{% static %}标记:

<img src="{% static 'cat.jpg' %}" alt="cats are funny"/>

答案 1 :(得分:0)

我认为问题应该是格式错误。 尝试以下两个修订: 1.在您的render()中,通过删除最后一个逗号,将“ return render(request,'rango / about.html',)”更改为“ return render(request,'rango / about.html')”; 2.在模板文件about.html中,更改。