【问题标题】:how to display images in django template如何在 django 模板中显示图像
【发布时间】:2011-11-10 10:50:59
【问题描述】:

对不起,我的问题很基本,我想在模板页面中显示图像,我正在工作时间,图像没有显示 我创建了一个新项目 SecondPrjt ,只有一个名为“index”的视图函数和一个名为 test.html 的模板,并在旁边的 SecondPrjt 文件夹中创建一个名为 static 的文件夹 并在其中创建文件夹图像并将所有需要的图像放在那里

urls.py:

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

urlpatterns += staticfiles_urlpatterns()


views.py

from django.shortcuts import 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/static",
)
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
Validating models...

0 errors found
Django version 1.3, using settings 'SecondPrjt.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
[05/Sep/2011 15:18:24] "GET / HTTP/1.1" 200 89
[05/Sep/2011 15:18:24] <b>"GET /images/img03.jpg HTTP/1.1" 404 2028

【问题讨论】:

  • 我尝试像 一样对 test.html 进行硬编码,这也失败了
  • 硬编码时,没有404信息,但静止图像不显示
  • 我的 html 语法有什么问题吗?,在 Internet Explorer 中是有效的(硬编码时)
  • 它在 IE 中工作但在硬编码时无法在其他地方工作的原因是因为你需要 file:// 语法......但是硬编码它真的告诉你除了文件存在的事实之外在您的计算机上。
  • 我试过 file:///C:/wamp/www/SecondPrjt/static/images/img03.jpg ,当我运行127.0.0.1:8000 时也失败了。但是,当使用 mozilla firefox 右键单击​​ test.html 时,它会显示带有图像的页面。

标签: image python-2.7 django-1.3


【解决方案1】:

您的问题很可能是您在 STATIC_ROOTSTATICFILES_DIRS 中都使用了绝对 URL。

如果您想在每个静态目录中包含绝对 URL(感觉就像是 hack,但没关系,因为您应该只在开发中使用 staticfiles_urlpatterns()),那么您可以通过简单地设置 @987654325 来解决此问题@。

编辑:看起来这不是你唯一的错误。此外,如果您查看调试输出,您会发现 404 有一些奇怪的地方——它来自/images/img03.jpg。如果你还记得的话,你曾尝试将{{ STATIC_URL }} 附加到它上面,所以它应该是/static/images/img03.jpg

这是因为在使用 render_to_response 时,您永远不会传递任何上下文(因此模板永远无法访问 STATIC_URL - 它认为它是空白的(因此为什么您没有看到 /static/ 作为图片 URL。当您想使用 ANY 上下文时,您必须将其传递给模板。在这种情况下,您应该使用 [RequestContext]

因此,您必须确保在 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 项目中,我经常使用以下代码 sn-p:

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。

【讨论】:

  • 感谢 4 的回复,设置 STATIC_ROOT = ' ' 后问题依旧。
  • @Jisson 我已经更新了它——看起来你有第二个错误(你没有将任何上下文传递给 render_to_response)。我建议您阅读我的整个答案(尽管后半部分只是一般性的解释),也许可以去 Django 文档并阅读更多内容。上下文和上下文处理器在您第一次遇到它们时很难理解,但它们确实很重要,并且它们是 Django 强大功能的重要组成部分。
  • 非常感谢。我在你的帮助下解决了这个问题。实际上我现在正在研究 Django 来开发一个 Web 应用程序(相当大),除了 django 项目和 djangobook 之外,哪些是最好的免费教程?
  • 我一直发现 django 文档相当全面。当我开始时,我只是使用“你的第一个 django 应用程序”教程,然后浏览了文档并构建了很多东西。我不确定一般教程,但在我看来,Django 文档是我读过的最好的文档。
  • 好的,谢谢 Alex C。我还有一个疑问,如何在 css 文件中使用图像?有什么办法没有硬代码吗?现在我使用如下,body { margin: 0;填充:0;背景:#FFFFFF url(C:/wamp/www/SecondPrjt/static/images/img02.gif)重复;字体系列:Arial、Helvetica、sans-serif;字体大小:14px;颜色:#402C16; }
猜你喜欢
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
相关资源
最近更新 更多