如何在django模板中显示图像

时间:2011-09-05 08:17:25

标签: image python-2.7 django-1.3

抱歉,我的问题非常基本,我想在模板页面中显示图像,我正在工作时间,图像没有显示 我创建了一个新项目SecondPrjt,只有一个名为'index'的视图函数和一个名为test.html的模板,并在SecondPrjt文件夹中创建一个名为static的文件夹 并在其中创建文件夹图像并将所有需要的图像放在那里
urls.py:

urlpatterns = patterns('',
    #例子:
    #url(r'^ $','SecondPrjt.views.home',name ='home'),
     (R '^ $', 'views.index'),
    ......... )

urlpatterns + = staticfiles_urlpatterns()

views.py 的 来自django.shortcuts导入render_to_response
def index(request):
    return render_to_response('test.html')


的test.html:
    img src =“{{STATIC_URL}} images / img03.jpg”width =“186”height =“186”

settings.py


STATIC_ROOT =“C:/ wamp / www / SecondPrjt / static”
STATIC_URL ='/ static /'
STATICFILES_DIRS =(     “C:/ WAMP / WWW / SecondPrjt /静”, )
STATICFILES_FINDERS =(     'django.contrib.staticfiles.finders.FileSystemFinder',     'django.contrib.staticfiles.finders.AppDirectoriesFinder',


INSTALLED_APPS =(
        -----
    'django.contrib.staticfiles',
    ---- )

任何人都可以提出我的错误。注意我正在使用 windows django1.3 并使用开发服务器。提前谢谢 我在浏览中请求http://127.0.0.1:8000/后得到以下内容
c:\ wamp \ www \ SecondPrjt> python manage.py runserver 验证模型......

发现0错误 Django 1.3版,使用设置'SecondPrjt.settings' 开发服务器正在http://127.0.0.1:8000/运行 使用CTRL-BREAK退出服务器。 [05 / Sep / 2011 15:18:24]“GET / HTTP / 1.1”200 89 [05 / Sep / 2011 15:18:24] “GET /images/img03.jpg HTTP / 1.1”404 2028

1 个答案:

答案 0 :(得分:2)

您的问题很可能是您在STATIC_ROOTSTATICFILES_DIRS使用了绝对网址。

如果你想在每个静态目录中包含绝对URL(感觉就像一个黑客,但它很好,因为你应该只在开发中使用staticfiles_urlpatterns()),那么你可以通过简单的设置解决问题STATIC_ROOT = ''

修改:看起来这不是您唯一的错误。另外,如果你看看你的调试输出,你会注意到404的一些奇怪的东西 - 它来自/images/img03.jpg。如果您还记得,那么您尝试将{{ STATIC_URL }}附加到该/static/images/img03.jpg,因此它应该是render_to_response

这是因为在使用STATIC_URL时,您永远不会传递任何上下文(因此模板永远无法访问/static/ - 它认为它是空白的(因此您没有看到{{1}作为图片网址的一部分。每当你想使用 ANY 上下文时,必须将它传递给模板。在这种情况下,你应该使用{{3} }。

因此,您必须确保已在 settings.py 中将django.core.context_processors.static添加到TEMPLATE_CONTEXT_PROCESSORS。您应该使用render_to_response,如下所示:

def index(request):
    return render_to_response('test.html', context_instance=RequestContext(request))


以下是对上下文处理器的解释

settings.py 中,您可以使用以下内容:

 TEMPLATE_CONTEXT_PROCESSORS = (
     'constant_context_processor.constants',
     'django.core.context_processors.static',
     'django.contrib.auth.context_processors.auth',
     'django.core.context_processors.debug',
     'django.core.context_processors.i18n',
     'django.core.context_processors.media',
     'django.core.context_processors.request', )

这里的重要部分是django.core.context_processors.static。在Django中,上下文处理器是一个返回上下文字典的函数。例如,在我的Django项目中,我经常使用以下代码片段:

constant_context_processor.py

import settings
def constants(request):
    return {
           'CONSTANTS': settings.CONSTANTS,
    }

(您将在 settings.py 中注意到,我使用constant_context_processor.constants作为上下文处理器之一)。这允许我在 settings.py 中定义常量并在我的模板中使用它们,例如类似{{ CONSTANTS.favicon_url }}

正如您所看到的,上下文处理器和使用RequestContext的优势在于您自动添加模板中通常需要的上下文,因此您无需在每个视图中手动填充上下文的字典。 Django知道您通常希望在模板中访问某些变量,因此它们可以通过其上下文处理器访问它们(因此,例如,django.core.context_processors.request将允许您访问给定的请求,其GET和POST参数以及模板中的所有元数据,如果您根据GET参数改变内容,这通常很有用。)

在你的情况下,你不想使用太多的上下文,但你确实想要使用一点({{ STATIC_URL }}),所以你至少需要django.core.context_processors.static。