7

我刚刚下载了最新的 Django 版本(1.4.1),在本地使用 runserver 进行开发时,我不知道如何提供 css 文件。我已经阅读了有关静态文件的相关 Django 文档以及这里的许多问题和答案......听起来它应该或多或少是自动的,但它对我不起作用。

我正在开发本教程中的民意调查应用程序。

来自日志的 404

[27/Apr/2012 01:04:09] "GET /polls/ HTTP/1.1" 200 210
[27/Apr/2012 01:04:09] "GET /polls/css/styles.css HTTP/1.1" 404 2596 

目录结构

mysite
|-- manage.py
|-- mysite
    |-- __init__.py
    |-- settings.py
    |-- urls.py
    |-- wsgi.py
|-- polls
    |-- __init__.py
    |-- models.py
    |-- tests.py
    |-- views.py
    |-- static
        |-- css
            |-- styles.css
|-- templates
    |-- polls
        |-- index.html

索引.html

<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/styles.css">

设置.py

MEDIA_ROOT = ''
MEDIA_URL = ''
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = ()
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
'django.core.context_processors.static',
)

^^^ 当我启动项目时我在 settings.py 中没有 TEMPLATE_CONTEXT_PROCESSORS 变量并且必须手动添加它 - 我应该担心吗?

STATICFILES_DIRS 是空的,因为 css 文件位于 polls 应用程序中名为 static 的目录中,这是 Django 自动查找它的地方 - 对吧?

我的 INSTALLED_APPS 中也有 django.contrib.staticfiles。

网址.py

我在文档中看到,该解决方案适用于 runserver 以外的本地开发服务器-听起来好像没有必要,对吧?(我目前已将其注释掉。)

编辑:我取消注释这些行,但没有看到变化 - 在 css 文件上仍然得到相同的 404

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()

我的目录结构设置错误吗?我是否缺少 settings.py 中的必要设置?任何帮助将不胜感激!谢谢!


编辑:

我接受了 Mark 的建议并阅读了 RequestContext。改变我的观点:

return render_to_response('polls/index.html', {'latest_poll_list': latest_poll_list})

from django.template import RequestContext
...
return render_to_response('polls/index.html', {'latest_poll_list': latest_poll_list}, context_instance=RequestContext(request))

得到 /static/ url 注册:

[27/Apr/2012 13:56:55] "GET /static/css/styles.css HTTP/1.1" 200 19

这解决了问题。

4

4 回答 4

10

为了STATIC_URL在模板中使用,您需要确保使用 aRequestContext以及添加'django.core.context_processors.static'TEMPLATE_CONTEXT_PROCESSORS. 如果您使用render快捷方式,这将为您完成。如果您不使用 aRequestContext那么您可以使用模板标签库{% get_static_prefix %}中的模板标签。staticfiles这在此处的文档中有详细说明:https ://docs.djangoproject.com/en/1.4/ref/contrib/staticfiles/#other-helpers

于 2012-04-27T18:33:38.720 回答
1

。我遇到了同样的问题,并且几乎与上面提到的相同的coinfuration这成功了:我在setting.py中添加了STATICFILES_DIRS中我的静态目录的路径:

STATICFILES_DIRS = (
os.path.join(PROJECT_DIR,'static'),
)

当还在 settings.py PROJECT_DIR 设置为:

PROJECT_DIR=os.path.dirname(os.path.abspath(__file__))
于 2012-12-29T13:19:29.287 回答
0

从您的 404 来看,您的模板中似乎没有包含 {{ STATIC_URL }}。这大概就是问题所在。而不是仅仅“css/file”,做“{{ STATIC_URL}}css/file”

不用太努力,您的设置看起来还不错。如果上述方法不起作用,请尝试运行 ./manage.py collectstatic 并查看是否有帮助(它将静态文件从应用程序目录移动到项目静态目录中)。

并且绝对取消注释 urls.py 中的这些行!如果您没有静态 url 模式,那么当它从 /static/ 请求某些内容时,它将不知道该怎么做。

于 2012-04-27T17:31:30.540 回答
0

这在开发服务器下对我有用:
1. 我在我的应用程序“myblog”目录下添加了“静态”文件夹。
2. 在“static”文件夹中添加了“myblog.css”文件。
3. 将样式表链接到我的应用程序模板,代码如下。

<link rel="stylesheet" href="{{ STATIC_URL }}myblog.css" type="text/css" media="screen" />

我没有更改 settings.py 或 urls.py 文件以修复 css,所做的更改仅根据教程进行,所以你应该有相同的。

于 2013-02-02T16:15:12.910 回答