如何在Django模板中显示图像
-
25-10-2019 - |
题
对不起,我的问题非常基本,我想在模板页面中显示一个图像,我正在为其工作,图像没有显示我创建一个新的项目secondprjt,只有一个名为'index'的视图函数和一个名为nate test.html,并创建一个在侧面secondprjt文件夹中名为static的文件夹,并在其中创建文件夹,并在其中放置所有需要的图像
urls.py:
urlpatterns =模式('',,
# 例子:
#url(r'^$','secondprjt.views.home',name ='home'),
(r'^$','views.index'),
.........
)
urlpatterns += staticfiles_urlpatterns()
Views.py来自django.shortcuts导入render_to_response
DEF索引(请求):
返回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.finders.appdirectoriesfinder,
)
instasted_apps =((
-----
'django.contrib.staticfiles',
----
)
任何人都可以建议我怎么了。笔记我在用 视窗 和 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/sep/2011 15:18:24 “ get/images/img03.jpg http/1.1” 404 2028
解决方案
您的问题很可能是您在这两个中都使用了绝对URL STATIC_ROOT
和 STATICFILES_DIRS
.
如果您想将绝对URL包含在每个静态DIR上(感觉就像是一个黑客,但是很好,因为您只能使用 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.static
至 TEMPLATE_CONTEXT_PROCESSORS
在 settings.py. 。您应该使用 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中,上下文处理器是返回上下文dict的函数。例如,在我的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.request将使您访问给定的请求,get and stost和post。参数以及来自模板的各种元数据,如果您根据get参数更改内容通常很有用)。
就您而言,您不想使用太多上下文,但是您确实想使用一点({{ STATIC_URL }}
),因此您至少需要django.core.context_processors.static。