在 DjangoStarter 中集成 TailwindCSS

djangostarter,tailwindcss · 浏览次数 : 55

小编点评

本文主要介绍了如何将 Tailwind CSS 添加到 Django Starter 框架中,并使用原生 Django 管理前端静态资源。文章首先介绍了 Tailwind CSS 的安装和配置,然后创建了一个 CSS 文件并启动 Tailwind。接着,文章讨论了 Tailwind 生态系统的丰富性,以及如何在项目中使用 Flowbite 和 Daisy 组件库。最后,文章介绍了如何使用 Django Compressor 压缩静态资源,以提高网站的加载速度和性能。 1. **Tailwind CSS 安装与配置**:本文首先介绍了如何在 Django Starter 项目中安装 Tailwind CSS,包括使用 npm 和 pnpm 进行安装,并通过命令行进行初始化配置。 2. **创建 CSS 文件与启动 Tailwind**:在项目根目录下创建了一个名为 `tailwind.src.css` 的 CSS 文件,并通过 Tailwind CLI 启动 Tailwind,生成动态生成的 CSS 文件。 3. **Tailwind 生态系统与组件库**:文章讨论了 Tailwind 生态系统的丰富性,提供了多种组件库供选择。作者在项目中使用了 Flowbite 和 Daisy 组件库,并对比了它们的优缺点。 4. **使用 Django Compressor 压缩静态资源**:文章介绍了如何使用 Django Compressor 压缩静态资源,包括在 settings.py 文件中配置静态文件查找器,以及在模板中使用压缩后的 CSS 和 JS 文件。 总的来说,本文详细介绍了如何将 Tailwind CSS 集成到 Django Starter 框架中,并使用原生 Django 管理前端静态资源。通过使用 Tailwind CSS、Flowbite 和 Daisy 组件库,以及 Django Compressor 压缩静态资源,可以提高网站的加载速度和性能。

正文

前言

好久没有更新技术文章了

这个月开箱和随笔倒是写了不少,又忙又懒的

基础的文章不太想写,稍微深入一点的又需要花很多时间来写

虽然但是,最终还是想水一篇

最近做了一个基于 wagtail 的项目,有不少东西可以记录。本文先记录一下把 tailwindcss 支持添加到 DjangoStarter 框架里

使用原生 Django 的话也能参考,都是大同小异的

之前看到有个叫 django-tailwind 的 python包,不过可能配套的 tailwind 版本不方便更新,再加上 DjangoStarter 很早就使用 NPM 和 gulp 来管理前端静态资源了,所以还是手动来添加 tailwind 比较好。

安装 tailwindcss

安装

在 DjangoStarter 的项目根目录执行命令

pnpm install -D tailwindcss

初始化

在根目录执行命令

npx tailwindcss init

这个命令会在根目录添加 tailwind.config.js 文件,修改一下

/** @type {import('tailwindcss').Config} */
module.exports = {
    content: [
        './src/**/templates/**/*.html',
    ],
    theme: {
        extend: {},
    },
    plugins: [],
}

创建css文件

创建 src/static/css/tailwind.src.css 文件

内容

@tailwind base;
@tailwind components;
@tailwind utilities;

启动 tailwind

在根目录执行命令

npx tailwindcss -i .\src\static\css\tailwind.src.css -o .\src\static\css\tailwind.css --watch

这样就搞定了

在开发过程中,tailwindcss会根据项目里用到的class动态生成css文件

tailwind组件库

tailwind生态还是很丰富的,组件库有很多选择,就算不要组件库也行,网上搜一下有很多 samples ,里面不乏一些让人眼前一亮的设计,现在有了 GPT 还能让 GPT 来写界面。

我目前在项目里用的是 Flowbite 和 Daisy

实际使用下来,还是 Flowbite 比较舒服,组件样式定义比较自由,不过就要写好多 class

而 Daisy 就屏蔽了很多组件定义的细节,相对来说不太好修改样式

举个例子

同样是按钮

flowbite 是这样定义的

<button type="button" class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 me-2 mb-2 dark:bg-blue-600 dark:hover:bg-blue-700 focus:outline-none dark:focus:ring-blue-800">Default</button>

daisy 是这样,有点 bootstrap 的感觉

<button class="btn btn-primary">Primary</button>

虽然 daisy 的代码很简洁,不过要自己调整有点麻烦

所以我还是倾向于使用 flowbite 这种风格,然后需要重复使用就自己封装成组件

使用 django-compressor 压缩静态资源

django-compressor 能够压缩和合并静态文件,提高网站的加载速度和性能。

之前我们是使用 gulp 这个 node 的工具来处理静态资源,也包括压缩静态资源这个功能,现在把压缩这一步交给 django-compressor ,更方便。

安装

pdm add django-compressor>=4.5

注册服务与配置

修改 src/config/settings/components/common.py

添加到 INSTALLED_APPS 里面

INSTALLED_APPS = [
  # ...
  'compressor',
  # ...
]

然后再配置一下 STATICFILES_FINDERS

使用脚手架创建的 settings.py 里是没有这个配置的,前两个 finder 是 Django 默认有的

STATICFILES_FINDERS = [
  'django.contrib.staticfiles.finders.FileSystemFinder',
  'django.contrib.staticfiles.finders.AppDirectoriesFinder',
  'compressor.finders.CompressorFinder',
]

添加 src/config/settings/components/compressor.py 文件,把 compressor 的配置单独出来。

这个库有很多配置,具体可以看官方文档,这里我就只是把压缩的开关打开

COMPRESS_ENABLED = True

使用

OK,使用很简单。在引入 css/js 的地方使用 compressor template tag 就好

先引入 template tag

{% load compress %}

压缩CSS

{% compress css %}
  <link rel="stylesheet" href="{% static 'css/tailwind.css' %}">
  <link rel="stylesheet" href="{% static 'lib/font-awesome/css/all.min.css' %}">

  {% block extra_css %}
	  {# Override this in templates to add extra stylesheets #}
  {% endblock %}
{% endcompress %}

压缩JS

{% compress js %}
  <script src="{% static 'lib/vue/dist/vue.min.js' %}"></script>
  <script src="{% static 'lib/flowbite/dist/flowbite.min.js' %}"></script>

  {% block extra_js %}
	  {# Override this in templates to add extra javascript #}
  {% endblock %}
{% endcompress %}

参考资料

与在 DjangoStarter 中集成 TailwindCSS相似的内容:

在 DjangoStarter 中集成 TailwindCSS

前言 好久没有更新技术文章了 这个月开箱和随笔倒是写了不少,又忙又懒的 基础的文章不太想写,稍微深入一点的又需要花很多时间来写 虽然但是,最终还是想水一篇 最近做了一个基于 wagtail 的项目,有不少东西可以记录。本文先记录一下把 tailwindcss 支持添加到 DjangoStarter

项目完成小结 - Django-React-Docker-Swag部署配置

前言 最近有个项目到一段落,做个小结记录。 内容可能会多次补充,在博客上实时更新哈~ 如果是在公众号阅读这篇文章,可以点击「查看原文」访问最新版本~ 这个项目是前后端分离,后端为了快,依然用我的DjangoStarter框架。前端一开始是小程序,后面突然换成公众号H5的形式,还好我用了Taro,大差

深入理解 Vue 3 组件通信

在 Vue 3 中,组件通信是一个关键的概念,它允许我们在组件之间传递数据和事件。本文将介绍几种常见的 Vue 3 组件通信方法,包括 props、emits、provide 和 inject、事件总线以及 Vuex 状态管理。 1. 使用 props 和 emits 进行父子组件通信 props

WPF使用AppBar实现窗口停靠,适配缩放、全屏响应和多窗口并列(附封装好即开即用的附加属性)

在吕毅大佬的文章中已经详细介绍了什么是AppBar: WPF 使用 AppBar 将窗口停靠在桌面上,让其他程序不占用此窗口的空间(附我封装的附加属性) - walterlv 即让窗口固定在屏幕某一边,并且保证其他窗口最大化后不会覆盖AppBar占据的区域(类似于Windows任务栏)。 但是在我的

强烈推荐:18.3k star,推荐一款简单易用的HTTP请求流量录制回放工具:Goreplay

在软件开发和测试过程中,我们经常需要对应用程序的网络请求进行录制和回放,以便进行性能分析、压力测试或者模拟复杂的网络环境。今天,我要向大家推荐一款简单易用的 HTTP 请求流量录制回放工具:Goreplay。 1、简介 Goreplay 是一款用 Go 语言编写的 HTTP 请求流量录制回放工具。它

吐血整理如何在Google Earth Engine上写循环 五个代码实例详细拆解

在这里同步一篇本人的原创文章。原文发布于2023年发布在知乎专栏,转移过来时略有修改。全文共计3万余字,希望帮助到GEE小白快速进阶。 引言 这篇文章主要解答GEE中.map()和.iterate()函数的用法。 首先解答一个疑问,为什么需要自己写循环?确实,GEE 为各种数据类型提供了无数常用的内

企业级环境部署:在 Linux 服务器上如何搭建和部署 Python 环境?

在大部分企业里,自动化测试框架落地都肯定会集成到Jenkins服务器上做持续集成测试,自动构建以及发送结果到邮箱,实现真正的无人值守测试。 不过Jenkins搭建一般都会部署在公司的服务器上,不会在私人电脑里,而服务器大部分都是Linux操作系统的。所以,我们如果要在Linux上的Jenkins服务

manim边学边做--Matrix

在代数问题中,矩阵是必不可少的工具,manim中提供了一套展示矩阵(Matrix)的模块,专门用于在动画中显示矩阵格式的数据。关于矩阵的类主要有4个: Matrix:通用的矩阵 IntegerMatrix:元素是整数的矩阵 DecimalMatrix:元素包含小数的矩阵 MobjectMatrix:

OceanBase 金融项目优化案例(union all 改写)

在工单系统上看到有一条sql问题还没解决,工单描述看到压测场景被cpu资源被这条sql打爆,目前影响到项目进度,比较紧急。 直接联系这位同学看看是否需要帮忙。 慢SQL: SELECT task.*, sc01.aab300 bjsjjg, (SELECT sc05.bsc012 FROM sc05

iOS开发基础109-网络安全

在iOS开发中,保障应用的网络安全是一个非常重要的环节。以下是一些常见的网络安全措施及对应的示例代码: Swift版 1. 使用HTTPS 确保所有的网络请求使用HTTPS协议,以加密数据传输,防止中间人攻击。 示例代码: 在Info.plist中配置App Transport Security (