一个可怜的django初学者在某些视图上访问静态文件(css,js)时遇到阻塞问题。主要是,在主页上,这些静态文件是完全可访问的,但在不同的页面上,它没有,并且布局完全被破坏。
这是我的settings.py:
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'bands',
'lyrics',
'articles',
)
PROJECT_DIR = os.path.dirname(__file__)
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(PROJECT_DIR, "static"),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
这是我的基本通用模板的一部分,其中包含视图扩展:
<link rel="Shortcut icon" href="{{ STATIC_URL }}img/favicon32.png" />
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/bootstrap.css">
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.10.1/jquery-ui.min.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}js/sortable.js"></script>
渲染时,会返回这样的代码(这就是我想要的):
<link rel="Shortcut icon" href="/static/img/favicon32.png" />
<link rel="stylesheet" type="text/css" href="/static/css/bootstrap.css">
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/ui/1.10.1/jquery-ui.min.js"></script>
<script type="text/javascript" src="/static/js/sortable.js"></script>
这是主页视图的代码(静态文件工作的代码):
def slider(request):
context = Context ({ 'articles': Article.objects.order_by('-created_at')[:5] })
return render(request, 'articles/slider.html', context)
这是不访问静态文件的视图(它使用django docs上的分页示例):
def archive(request, page="1"):
articles_list = Article.objects.all().filter(active=True)
paginator = Paginator(articles_list, 6)
try:
articles = paginator.page(page)
except PageNotAnInteger:
articles = paginator.page(1)
except EmptyPage:
articles = paginator.page(paginator.num_pages)
context = Context({
'articles': articles
})
return render_to_response('articles/archive.html', context)
如果有人猜到可能出错的地方,请告诉我。
当前项目的代码以github repo提供。
答案 0 :(得分:7)
您必须使用RequestContext
:
from django.template import RequestContext
def archive(request, page="1"):
# ...
return render_to_response('articles/archive.html',
context,
context_instance=RequestContext(request))
或使用render
快捷方式,它就像render_to_response
,但使用RequestContext
:
from django.shortcuts import render
def archive(request, page="1"):
# ...
return render('articles/archive.html', context)
请注意,您在render
视图中使用了slider
。
答案 1 :(得分:0)
[1] 将您的目录名称添加到静态目录所在的 INSTALLED_APPS 中。
[2] 在你的 html 模板中加载静态
[1] 例如 [我在 TestAPP 中有静态] [查看此链接] :https://i.stack.imgur.com/zHEck.png
[2] 然后[在您的 HTML 模板中加载静态文件,如下所示] :https://i.stack.imgur.com/vPkFb.png