如何在Django应用中使用bower包管理器?

18 投票
5 回答
8399 浏览
提问于 2025-04-18 08:28

我刚接触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 个回答

2

如果你担心bower.json文件会被包含进来,可以使用collectstatic命令中的--ignore选项,这样你就可以排除你不想要的文件。

2

你需要在settings.py文件中列出已安装的bower包,使用的关键字是BOWER_INSTALLED_APPS。

在你的开发服务器上,使用{% static %}这个模板标签可以从它们的安装目录中找到这些包。而在生产服务器上,collectstatic命令会从安装目录(bower_components)中收集正确的静态文件。

想了解更多,可以查看这个链接:http://django-bower.readthedocs.org/en/latest/usage.html

2

没有一个固定的推荐方法,这要看你的项目需求。如果你在使用bower和node,并且这些工具不仅仅是为了django项目,那么把它放在项目的根目录(也就是django的上面)可能更合适,这样可以在其他地方重复使用。

如果只是为了django的静态文件,那么把它放在一个src/文件夹里,放在staticfiles系统之外,这样可以通过collectstatic命令把它构建到静态目录里,可能会更合理。

4

其实不需要像django-bower这样的应用,或者其他那些占用服务器资源的专用工具,这些工具会拖慢构建时间,还会大大限制bower的使用效果。尤其是当你有嵌套的django应用,每个应用都有自己的bower依赖时,这种情况更明显。

你可以查看我的教程,了解如何无缝地将Django、Bower和Heroku结合在一起,点击这里虽然这个教程是针对heroku的,但其中的方法适用于任何部署场景。

8

我按照这篇博客的指导来设置我的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}),)

撰写回答