Django STATIC_URL无效

thl*_*ood 14 python django django-staticfiles web

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',
)
Run Code Online (Sandbox Code Playgroud)

在我的模板中:

<link href="{{ STATIC_URL }}css/main.css" ...>
Run Code Online (Sandbox Code Playgroud)

但是,在我的broswer是:

<link href="css/main.css" ...> (Just render `STATIC_URL` as empty)
Run Code Online (Sandbox Code Playgroud)

我的设置是:

STATIC_ROOT = os.path.join(PROJECT_PATH, 'static')
STATIC_URL = '/static/'
Run Code Online (Sandbox Code Playgroud)

在我的 views

def register(request):
    ...
    return render_to_response('register.html', {'errors':errors})
Run Code Online (Sandbox Code Playgroud)

Pas*_*cal 21

更改

return render_to_response('register.html', 'errors':errors)
Run Code Online (Sandbox Code Playgroud)

return render_to_response('register.html', {'errors': errors}, RequestContext(request))
Run Code Online (Sandbox Code Playgroud)


che*_*che 6

不幸的是,Django的render_to_response默认快捷方式使用了普通的模板上下文,它不包括上下文处理器以及它们所有的花哨和有用的东西STATIC_URL.你需要使用RequestContext,这恰好做了.

这可以通过使用new render(自Django 1.3以来可用)来调用:

from django.shortcuts import render

return render(request, 'register.html', {'errors':errors})
Run Code Online (Sandbox Code Playgroud)

在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))
Run Code Online (Sandbox Code Playgroud)


sel*_*ler 6

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

尝试:

{% load staticfiles %}
<link href="{% static "css/main.css" %} ...>
Run Code Online (Sandbox Code Playgroud)