【发布时间】:2013-03-20 08:33:02
【问题描述】:
我刚开始使用 Django,在 AptanaStudio3 中使用 PyDev。我使用有用的 Django 教程来构建我的简单项目的主干。现在我正在尝试使用 css 进行一些基本的格式化和着色,但已经花了很长时间挣扎。
html 页面仍然显示正常。它只是没有抓住css(404)。我从控制台知道这一点:
[20/Mar/2013 12:41:51] "GET /signup/ HTTP/1.1" 200 306
[20/Mar/2013 12:41:51] "GET /signup/static/signup.css HTTP/1.1" 404 2750
我的文件结构:
Learning
- Learning
--- templates
----- 404.html
----- 500.html
--- _init.py
--- settings.py
--- urls.py
--- wsgi.py
- signup
--- static
----- signup.css
--- templates
----- signup
------- detail.html
------- index.html
------- results.html
----- __init__.py
----- admin.py
----- models.py
----- tests.py
----- urls.py
----- view.py
--- manage.py
--- sqlite.db
--- python
在设置中:
STATIC_ROOT = ''
STATIC_URL = 'static/'
STATICFILES_DIRS = ('')
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
在我的 html 模板中:
<html>
<head>
<title>User List</title>
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}signup.css" />
...
在views.py中:
def ip_address_processor(request):
return {'ip_address': request.META['REMOTE_ADDR']}
def index(request):
user_list = User.objects.order_by('name')[:5]
template = loader.get_template('signup/index.html')
context = RequestContext(
request,
{'user_list': user_list,},
[ip_address_processor])
return HttpResponse(template.render(context))
有什么见解吗?
【问题讨论】:
-
你运行
./manage.py collectstatic了吗? Django 需要将所有静态文件收集到一个目录中,以便使用测试服务器为它们提供服务。另外,请务必将您的STATIC_ROOT设置设置为绝对且可写的路径,以便可以有效地收集文件。有关详细信息,请参阅Django documentation on static files。另外,请记住,在生产环境中,静态文件应直接由 HTTP 服务器提供。 -
此外,您的 CSS 文件在路径
/signup/static/signup.css处检索,而您的STATIC_URL是/static/。 您需要将该路径设为绝对路径,而不是相对于您的页面。 更改为href="/{{ STATIC_URL }}signup.css",或使用staticfiles库提供的{% static 'signup.css' %}模板标签(更好 !)。 -
@pistache (post1),不,我没有运行它。我只是按照你的建议做了,没有解决。我马上更新文件结构。
-
@pistache (post2) 太棒了! STATIC_URL 路径是问题所在。我做到了绝对,奇迹发生了。非常感谢! (另外,如果您将该评论作为正式答案,我会很乐意接受)
-
@pistache 不正确,collectstatic 仅用于部署,不用于开发。