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)
不幸的是,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)
在Django 1.4中,您应该使用statictemplatetag 1.
尝试:
{% load staticfiles %}
<link href="{% static "css/main.css" %} ...>
Run Code Online (Sandbox Code Playgroud)