无法获取要在Django(1.3)项目中显示的图像

时间:2012-07-01 14:21:16

标签: django django-templates

我正在制作一个简单的Django项目,但我无法在我的页面中显示任何图像。

https://docs.djangoproject.com/en/1.3/howto/static-files/#basic-usage州的Django文档

  

基本用法将静态文件放在staticfiles会找到的位置   它们。

     

默认情况下,这意味着您的应用的静态/子目录   INSTALLED_APPS。

     

您的项目可能还会包含与之无关的静态资产   特定的应用程序。 STATICFILES_DIRS设置是一个元组   加载静态文件时要检查的文件系统目录。它是   搜索路径默认为空。请参阅STATICFILES_DIRS文档   如何扩展此附加路径列表。

     

此外,请参阅STATICFILES_FINDERS的文档   设置有关静态文件如何查找文件的详细信息。

     

确保django.contrib.staticfiles包含在您的   INSTALLED_APPS。

     

对于本地开发,如果您使用的是runserver或添加   staticfiles_urlpatterns到你的URLconf,你完成了设置 -   您的静态文件将自动以默认状态提供(for   新创建的项目)/ static /.

的STATIC_URL      

您可能需要在模板中引用这些文件。该   最简单的方法是使用允许的包含上下文处理器   模板代码如:

     

参见参考   模板中的静态文件以获取更多详细信息,包括备用文件   使用模板标签的方法。

所以我在settings.py中做了这个:

STATICFILES_DIRS = (
    '/home/abc/django/project1/media/',
)

并启用'django.contrib.staticfiles', 在媒体中,我有一个文件夹img,它有各种jpg文件。

在我的模板中,我将其作为其中一行:

<img src="{{STATIC_URL}}img/{{var}}.jpg">

当我通过我的视图将var传递给此模板时。

HTML页面似乎将此标记呈现为"<img src="img/abc.jpg">,其中var =“abc”。 但我的浏览器拒绝显示图像。我做错了什么?

2 个答案:

答案 0 :(得分:3)

您是否在文档中看到了这一部分:

如果{{ STATIC_URL }}在模板中不起作用,则在渲染模板时可能没有使用RequestContext。

您是否还在视图中使用RequestContext来呈现模板?

答案 1 :(得分:0)

这是另一种方法:

settings.py:

import os
PROJECT_DIR = os.path.dirname(__file__) + '/../'
STATIC_ROOT = os.path.join(PROJECT_DIR, 'media/')
STATIC_URL = '/media/'

在你的模板中:

{% load staticfiles %}
<img src="{% static img/foo.jpg %}" />

如果需要传递变量,请使用前缀方法:

{% load staticfiles %}
<img src="{% get_static_prefix %}img/{{var}}.jpg" />