如何在Django应用中使用bower包管理器?
我刚接触Django框架,听说像css和js这样的“静态”文件必须放在“static”目录里,但我有个问题:
因为bower这个包管理工具会在当前目录下新建一个叫bower_components的目录来安装它的依赖,那么bower.json文件是不是必须放在Django的“static”目录里呢?如果是这样的话,使用collectstatic命令时,bower.json文件不会被导出吗?(这可能不是我们想要的)
使用bower和Django框架的推荐方式是什么呢?
更新:
感谢Yuji 'Tomita' Tomita,你的回答让我有了更多的思考。我想用bower来管理前端的依赖,比如jQuery、bootstrap等等。按理说,这些应该放在static/django目录里,但这样做可能会导致bower.json被当作静态资源处理,这可能不是我们想要的结果。
5 个回答
如果你担心bower.json文件会被包含进来,可以使用collectstatic
命令中的--ignore
选项,这样你就可以排除你不想要的文件。
你需要在settings.py文件中列出已安装的bower包,使用的关键字是BOWER_INSTALLED_APPS。
在你的开发服务器上,使用{% static %}这个模板标签可以从它们的安装目录中找到这些包。而在生产服务器上,collectstatic命令会从安装目录(bower_components)中收集正确的静态文件。
想了解更多,可以查看这个链接:http://django-bower.readthedocs.org/en/latest/usage.html
没有一个固定的推荐方法,这要看你的项目需求。如果你在使用bower和node,并且这些工具不仅仅是为了django项目,那么把它放在项目的根目录(也就是django的上面)可能更合适,这样可以在其他地方重复使用。
如果只是为了django的静态文件,那么把它放在一个src/
文件夹里,放在staticfiles
系统之外,这样可以通过collectstatic命令把它构建到静态目录里,可能会更合理。
其实不需要像django-bower这样的应用,或者其他那些占用服务器资源的专用工具,这些工具会拖慢构建时间,还会大大限制bower的使用效果。尤其是当你有嵌套的django应用,每个应用都有自己的bower依赖时,这种情况更明显。
你可以查看我的教程,了解如何无缝地将Django、Bower和Heroku结合在一起,点击这里。虽然这个教程是针对heroku的,但其中的方法适用于任何部署场景。
我按照这篇博客的指导来设置我的Django Bower项目:
项目结构:
|-root
|-app
|-assets
|-static
|-templates
|settings.py
|urls.py
|views.py
|wsgi.py
|manage.py
|bower.json
|.bowerrc
我的.bowerrc
文件:
{
"directory": "app/static/bower_components"
}
我这样使用bower组件:
<script src="{{ STATIC_URL }}bower_components/angular/angular.js"></script>
我的settings.py
文件:
STATIC_URL = '/static/'
STATIC_ROOT = join(BASE_DIR, 'assets')
STATICFILES_DIRS = [join(BASE_DIR, 'static')]
还有urls.py
文件:
urlpatterns += patterns('',
(r'^static/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': settings.STATIC_ROOT}),)