14

Django 版本是 1.4。我已经阅读了official document,并用谷歌搜索了我的问题。

首先我按照官方文档管理静态文件添加了这个settings.py

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" ...>

但是,在我的浏览器中是:

<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

5 回答 5

21

改变

return render_to_response('register.html', 'errors':errors)

return render_to_response('register.html', {'errors': errors}, RequestContext(request))
于 2012-07-27T08:50:48.157 回答
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))
于 2012-07-27T08:57:37.837 回答
6

在 Django 1.4 中,您应该使用statictemplatetag 1

尝试:

{% load staticfiles %}
<link href="{% static "css/main.css" %} ...>
于 2012-07-27T13:06:53.707 回答
2

您在退货声明中不需要这个吗?:

context_instance=RequestContext(request)

于 2012-07-27T08:11:50.713 回答
2

我意识到这已经得到了回答,但我想提供另一个答案,以防即使使用 RequestContext 时 STATIC_URL 仍然呈现为空。

如果您正在运行开发服务器,请记住使用不安全标志启动服务器以让服务器为您的静态文件提供服务:

python manage.py runserver --insecure
于 2012-12-21T18:35:10.260 回答