如何在 Django 1.4 中为本地开发提供静态文件
Posted
技术标签:
【中文标题】如何在 Django 1.4 中为本地开发提供静态文件【英文标题】:How to serve static files for local development in Django 1.4 【发布时间】:2012-05-08 11:18:17 【问题描述】:我刚刚下载了最新的 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 应用程序中名为 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
这解决了问题。
【问题讨论】:
取消注释后您是否重新启动了服务器? 【参考方案1】:为了在模板中使用STATIC_URL
,您需要确保使用RequestContext
,并将'django.core.context_processors.static'
添加到TEMPLATE_CONTEXT_PROCESSORS
。如果您使用的是render
快捷方式,这将为您完成。如果您没有使用RequestContext
,那么您可以使用staticfiles
模板标签库中的% get_static_prefix %
模板标签。这在此处的文档中有详细说明:https://docs.djangoproject.com/en/1.4/ref/contrib/staticfiles/#other-helpers
【讨论】:
谢谢马克!在编辑我的views.py 以使用RequestContext 之后,我看到css 文件的url 为static/css/styles.css。我仍然收到 404,但这是朝着正确方向迈出的一步。 :)django.contrib.staticfiles
在你的INSTALLED_APPS
中吗?
啊,我的错 - 我在尝试不同选项的过程中移动了 css 文件,却忘记将它放回正确的位置。它现在正在工作。非常感谢!【参考方案2】:
。 我遇到了同样的问题,并且与上面提到的相同的共同激怒,这成功了: 我在 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__))
【讨论】:
【参考方案3】:从您的 404 看来,您的模板中似乎没有包含 STATIC_URL 。这大概就是问题所在。而不是仅仅“css/file”,做“ STATIC_URLcss/file”
不用太费力,您的设置看起来还不错。如果上述方法不起作用,请尝试运行 ./manage.py collectstatic 并查看是否有帮助(它将静态文件从应用目录移动到项目静态目录中)。
并且绝对取消注释 urls.py 中的那些行! 如果您没有静态 url 模式,那么当它从 /static/ 请求某些内容时,它将不知道该怎么做。
【讨论】:
@jp42,如果你在我编辑它之前看到了答案,我编辑了它:) 嗨,科琳,感谢您的回复!我尝试运行 collectstatic,但没有看到任何效果......仍然看到相同的 404:[27/Apr/2012 12:53:40]“GET /polls/css/styles.css HTTP/1.1”404 2468 我会读不过,在collectstatic上。我在 index.html 文件的头部使用了 STATIC_URL 标签,如下所示(见上文): 您是否对模板进行了更改? 抱歉造成混乱,忘记输入帖子了。 :// 哦,我一直在你的帖子中发现一些东西。绝对取消注释您的 urls 文件中的这些行!这些都是必须的!【参考方案4】:这在开发服务器下对我有用: 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,所做的更改只是根据教程进行的,所以你应该有相同的。
【讨论】:
以上是关于如何在 Django 1.4 中为本地开发提供静态文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 Heroku 在 Django 中为本地开发配置 postgresql 数据库
ADMIN_MEDIA_PREFIX 弃用和在 Django 1.4 中使用静态文件