如何在Django 1.4中为本地开发提供静态文件

时间:2012-04-27 17:27:13

标签: css django static

我刚下载了最新的Django版本(1.4.1),在使用runserver进行本地开发时,我无法弄清楚如何提供css文件。我已经阅读了相关的Django docs on static files以及许多问题&答案在这里...听起来应该或多或少是自动的,但它不适合我。

我正在处理教程中的民意调查应用程序。

日志中的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

的index.html

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

settings.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 app中名为static的目录中,这是Django自动查找的目标 - 对吗?

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

urls.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 个答案:

答案 0 :(得分:10)

要在模板中使用STATIC_URL,您需要确保使用RequestContext并将'django.core.context_processors.static'添加到TEMPLATE_CONTEXT_PROCESSORS。如果您使用render快捷方式,则可以使用此功能。如果您未使用RequestContext,则可以使用{% get_static_prefix %}模板标记库中的staticfiles模板标记。这在以下文档中有详细说明:https://docs.djangoproject.com/en/1.4/ref/contrib/staticfiles/#other-helpers

答案 1 :(得分:1)

“。 我遇到了同样的问题,并且与上面提到的相同的共同创造了这个诀窍: 我在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__))

答案 2 :(得分:0)

在您的404中,您的模板中似乎没有包含{{STATIC_URL}}。那可能就是问题所在。而不仅仅是“css / file”,请执行“{{STATIC_URL}} css / file”

看起来不太难,你的设置看起来很好。如果上述方法不起作用,请尝试运行./manage.py collectstatic并查看是否有帮助(它将静态文件从app目录移动到项目静态目录中)。

肯定会在你的urls.py中取消注释这些行! 如果你没有静态url模式,当它从/ static /请求某些内容时,它将不知道该怎么做。

答案 3 :(得分:0)

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

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

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