3

假设我有一两个项目正在使用 Django 和 twitter bootsrap 构建。上述项目在 git 存储库中进行版本控制。

目前,我和大多数人一样,将(或将)下载 bootstrap,执行一些命令并愉快地编写代码cp -rgit add

但现在我停止了思考。

  • 一切都在 git 上。
  • git 支持子存储库。
  • Django 有collectstatic.
  • 这是 2013 年和持续集成等。是这十年的流行语

所以:必须有一种更优雅、更简单方法来做到这一点,因为我所做的一切都会严重违反DRY

4

2 回答 2

3

您可以在 django 中安装此应用程序并使用

pip install -U django-staticfiles-bootstrap 
./manage.py collectstatic 

将最新的引导代码拉入您的项目:)

https://github.com/Apreche/django-staticfiles-bootstrap

于 2013-06-27T00:25:59.453 回答
1

这可能不是您正在寻找的,因为该策略中有一个丑陋的部分,但值得一提的是恕我直言。

概述

  1. 在浏览器中以调试模式编译较少以进行开发。这使您的集成商能够更快地工作并在浏览器中查看语法错误报告,并使开发变得很棒。
  2. 使用 django-compressor进行生产,将你所有的 less 预编译到 css 中,让性能变得很棒。
  3. 能够在您的 less 脚本中重用:引导类、变量等,等等……否则还有什么不好的?问题是你必须让你的编译器在同一次运行中同时编译引导程序和你自己的 less 脚本。

Django级别的基本策略

这就是您的site_base.html模板可以包含的方式:

{% if debug %}
    <link rel="stylesheet" type="text/css" href="{% static 'autocomplete_light/style.css' %}" />
    <link href="{{ STATIC_URL }}bootstrap/less/bootstrap.less" charset="utf-8" type="text/less" rel="stylesheet">
    <script type="text/javascript">less = {}; less.env = 'development';</script>
    <script type="text/javascript" src="{{ STATIC_URL }}less.js" ></script>
{% else %}
    {% compress css %}
    <link rel="stylesheet" type="text/css" href="{% static 'autocomplete_light/style.css' %}" />
    <link href="{{ STATIC_URL }}bootstrap/less/bootstrap.less" charset="utf-8" type="text/less" rel="stylesheet">
     {% endcompress %}
{% endif %}

好吧,这就是丑陋的部分:它不是很干燥......但它确实很好用。如您所见,您需要调试上下文处理器

这就是您的设置的样子:

COMPRESS_PRECOMPILERS = (
    ('text/less', 'recess --compile {infile} > {outfile}'),
)

注意:当我这样做时,引导程序仅在无凹槽编译器上编译。也许现在支持其他编译器,但我不会打赌。

基本的 git 策略

要直接从他们的仓库重用引导程序,请使用git submodules

较低级别的基本策略

假设我们创建了一个custom.less应该能够重用引导程序的脚本,即。变量、类、mixin 等等。

我们现在有一个问题:编译器必须同时解析引导程序的内容custom.less。否则,编译器在编译时如何知道引导程序的变量custom.less

所以,你可以 import custom.lessin bootstrap.less,但这会导致你的 repo 之外的文件被修改(记住:bootstrap.less 来自一个子模块)。

解决方案:创建一个master.lesswhich import both bootstrap/less/bootstrap.lessand custom.less。不要忘记链接master.less而不是bootstrap.less在您的site_base.html.

于 2013-06-26T20:28:15.220 回答