使用Django和twitter bootstrap框架开发项目时,一种常见做法是下载bootstrap,然后使用 cp -r
和 git add
命令将其添加到项目中。这种方法虽然简单,但存在一些问题。
首先,它违背了DRY(不要重复自己)原则。bootstrap是一个庞大的框架,其中包含了许多CSS和JavaScript文件。这些文件在项目中可能被多次使用,但每次都需要手动复制,这既繁琐又容易出错。
其次,这种方法不适合持续集成。在持续集成环境中,每次代码提交都会自动触发一系列构建和测试任务。如果bootstrap文件没有被提交到版本控制系统,那么这些任务就无法正常执行。
解决方案
为了解决这些问题,我们可以使用git子模块来管理bootstrap。git子模块允许我们在项目中嵌入其他git仓库。这样,我们就只需要在项目中添加一个指向bootstrap仓库的引用,而无需复制bootstrap的文件。
要使用git子模块,首先需要在bootstrap仓库中初始化一个git子模块:
git submodule add https://github.com/twbs/bootstrap.git
然后,在项目中添加一个指向bootstrap子模块的引用:
git submodule add ../bootstrap
这样,bootstrap仓库就被添加到项目中,我们可以使用以下命令更新bootstrap代码:
git submodule update --remote
此外,我们可以使用Django的 staticfiles
应用程序来管理静态文件。staticfiles
应用程序可以自动收集项目中所有的静态文件,并将其复制到指定的目录。这样,我们就只需要在项目中添加一个指向bootstrap静态文件的引用,而无需复制这些文件。
要使用 staticfiles
应用程序,首先需要在项目中安装它:
pip install django-staticfiles
然后,在项目中添加以下配置:
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'bootstrap/dist'),
]
这样,staticfiles
应用程序就会自动收集bootstrap静态文件,并将其复制到项目的 static
目录中。
最后,我们可以使用Django的 collectstatic
命令来收集项目中的所有静态文件,并将其复制到指定的目录。这样,我们就只需要在项目中运行以下命令,即可更新bootstrap静态文件:
python manage.py collectstatic
通过使用git子模块和 staticfiles
应用程序,我们可以轻松地将bootstrap集成到Django项目中。这种方法不仅更加优雅,而且也更加适合持续集成。
代码例子
以下是一个使用Django、twitter bootstrap和git子模块的项目示例:
# 项目目录结构
myproject/
├── bootstrap/
│ └── dist/
│ ├── css/
│ │ └── bootstrap.min.css
│ │ └── bootstrap.min.css.map
│ └── js/
│ └── bootstrap.min.js
├── myapp/
│ ├── templates/
│ │ └── base.html
│ ├── views.py
│ └── urls.py
├── settings.py
└── wsgi.py
settings.py
:
# Django settings for myproject
# ...
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'bootstrap/dist'),
]
# ...
base.html
:
{% extends "base.html" %}
{% block content %}
<h1>Hello world!</h1>
{% endblock %}
views.py
:
from django.shortcuts import render
def index(request):
return render(request, 'base.html')
urls.py
:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
运行 python manage.py runserver
命令,即可启动项目。
访问 http://127.0.0.1:8000/
,即可看到一个简单的网页,其中包含了一个 Hello world!
标题。