1

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

网址.py:

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

urlpatterns += staticfiles_urlpatterns()


视图.py

from django.shortcuts import render_to_response 
def index(request):
    return render_to_response('test.html')


测试.html:

img src="{{ STATIC_URL }}images/img03.jpg" width="186" height="186"

设置.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',
)

任何人都可以建议我有什么问题。注意我正在使用windowsdjango1.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
4

1 回答 1

3

很可能,您的问题是您在STATIC_ROOT和中都使用了绝对 URL STATICFILES_DIRS

如果您想包含每个静态目录的绝对 URL(感觉就像是 hack,但这很好,因为您应该只staticfiles_urlpatterns()在开发中使用),那么您可以通过简单地设置STATIC_ROOT = ''.

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

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

因此,您必须确保已django.core.context_processors.staticsettings.pyTEMPLATE_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 项目中,我经常使用以下代码片段:

常量上下文处理器.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。

于 2011-09-06T06:45:11.330 回答