如何使用django在网页上添加css / image?

时间:2012-01-05 16:26:44

标签: python css django

我把图片(“hi.png”)和css文件放在/ home / user1 / djangoblog / blog / static

在模板中我有<img src="{{ STATIC_URL }}images/hi.png" />

我编辑了settings.py =&gt;

STATIC_ROOT = ''
STATIC_URL = "/static/"

STATICFILES_DIRS = (
    "/home/user1/djangoblog/blog/static/",)

网页来源返回=&gt;

<div><img src="/static/images/a.jpg" /></div>

如果views.py =&gt;图像不会显示在网页上。

now = datetime.datetime.now()
#return render_to_response('current_datetime.html', {"foo": now}, context_instance=RequestContext(request))
t = loader.get_template('current_datetime.html')
c = Context({'foo': now})
return HttpResponse(t.render(c))

但是如果views.py =&gt;它在网页上显示图像。

return render_to_response('current_datetime.html', {"foo": now}, context_instance=RequestContext(request))

看起来这是HttpResponse或RequestContext的问题。如何使用HttpResponse或RequestContext修复此问题?

2 个答案:

答案 0 :(得分:3)

您需要更仔细地阅读staticfiles文档。

使用STATIC_ROOT指定静态目录的绝对路径,并通过浏览器STATIC_URL指定可以访问目录的URL。您的主静态目录永远不会进入STATICFILES_DIRS。该设置仅允许您指定在运行collectstatic管理命令时应处理的其他目录。

通常,您从不使用您的实际静态目录。在开发中,Django提供来自每个应用程序的static目录和STATICFILES_DIRS中的任何目录(不包括主static目录)的文件。在生产中,您运行collectstatic管理命令,然后设置主Web服务器(Apache,Nginx等)以提供STATIC_ROOT中的文件。 Django 从不提供主static目录(STATIC_ROOT)中的任何内容。

答案 1 :(得分:3)

我怀疑问题是你的设置文件中没有staticfiles上下文处理器。这就是/static/未插入{{ STATIC_URL }}的原因。

就像放

一样简单
'django.core.context_processors.static',

进入settings.py文件中的上下文处理器列表(TEMPLATE_CONTEXT_PROCESSORS

更新

  

我在TEMPLATE_CONTEXT_PROCESSORS中添加了这个,但仍然没有用。 - guru 3小时前

'django.core.context_processors.static'添加到上下文处理器列表中修复了您的问题,因为正如您现在所看到的那样,它会在STATIC_URL处插入值{{1}在你的模板中。错误是您已将{{ STATIC_URL }}的值更改为STATIC_URL,可能是因为您对这里的一些答案感到困惑。

"/home/user1/djangoblog/blog/static/" 的值更改为STATIC_URL,以便该行显示为

'/static/'

这将解决您的问题。

Django模板只是将变量中的任何内容放入模板。他们不关心它是什么或它代表什么。如果STATIC_URL的值为STATIC_URL = '/static/' ,那么它会尽可能地/home/user1/djangoblog/blog/static/插入/home/user1/djangoblog/blog/static/,这就是您看到的原因

  

{{ STATIC_URL }}

每当呈现包含<img src="/home/user1/djangoblog/blog/static/images/a.jpg" />

的模板时