Django STATIC_URL无效

时间:2012-07-27 08:00:45

标签: python django web django-staticfiles

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})

4 个答案:

答案 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