Django版本是1.4。我读过official document
,然后搜索了我的问题。
首先,我按照settings.py
中的官方文档Managing static files添加了此内容:
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.static',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
)
在我的模板中:
<link href="{{ STATIC_URL }}css/main.css" ...>
但是,我的broswer是:
<link href="css/main.css" ...> (Just render `STATIC_URL` as empty)
我的设置是:
STATIC_ROOT = os.path.join(PROJECT_PATH, 'static')
STATIC_URL = '/static/'
在views
def register(request):
...
return render_to_response('register.html', {'errors':errors})
答案 0 :(得分:6)
不幸的是,Django的render_to_response
快捷方式默认使用普通模板上下文,它不包括上下文处理器及其所有奇特且有用的东西,如STATIC_URL
。您需要使用RequestContext
,这恰好可以做到。
这可以通过使用新的render
(自Django 1.3以来可用)来调用:
from django.shortcuts import render
return render(request, 'register.html', {'errors':errors})
在Django 1.2及更早版本中,您需要明确提供上下文:
from django.shortcuts import render_to_response
from django.template import RequestContext
return render_to_response('register.html', {'errors':errors},
context_instance=RequestContext(request))
答案 1 :(得分:6)
在Django 1.4中,您应该使用static
templatetag 1 。
尝试:
{% load staticfiles %}
<link href="{% static "css/main.css" %} ...>
答案 2 :(得分:2)
你在退货声明中不需要这个吗?:
context_instance=RequestContext(request)
答案 3 :(得分:2)
我意识到这已经得到了回答,但我想提供另一个答案,即使使用RequestContext,STATIC_URL仍然呈现为空。
如果您正在运行开发服务器,请记住使用 insecure 标志启动服务器,以使服务器为静态文件提供服务:
python manage.py runserver --insecure