在 DjangoStarter 中集成 TailwindCSS
前言
好久没有更新技术文章了
这个月开箱和随笔倒是写了不少,又忙又懒的
基础的文章不太想写,稍微深入一点的又需要花很多时间来写
虽然但是,最终还是想水一篇
最近做了一个基于 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 %}
参考资料
- https://django-compressor.readthedocs.io/en/stable/
- https://flowbite.com/docs/getting-started/django/
在 DjangoStarter 中集成 TailwindCSS的更多相关文章
- solr服务中集成IKAnalyzer中文分词器、集成dataimportHandler插件
昨天已经在Tomcat容器中成功的部署了solr全文检索引擎系统的服务:今天来分享一下solr服务在海量数据的网站中是如何实现数据的检索. 在solr服务中集成IKAnalyzer中文分词器的步骤: ...
- [译]MVC网站教程(四):MVC4网站中集成jqGrid表格插件(系列完结)
目录 1. 介绍 2. 软件环境 3. 在运行示例代码之前(源代码 + 示例登陆帐号) 4. jqGrid和AJAX 5. GridSettings 6. ...
- 如何在 ASP.NET MVC 中集成 AngularJS(3)
今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...
- 如何在 ASP.NET MVC 中集成 AngularJS(2)
在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...
- 如何在ios中集成微信登录功能
在ios中集成微信的登录功能有两种方法 1 用微信原生的api来做,这样做的好处就是轻量级,程序负重小,在Build Settings 中这样设置 然后设置 友盟的设置同上,但是要注意,加入你需要的所 ...
- 在Application中集成Microsoft Translator服务之开发前准备
第一步:准备一个微软账号 要使用Microsoft Translator API需要在Microsoft Azure Marketplace(https://datamarket.azure.com/ ...
- 在Abp中集成Swagger UI功能
在Abp中集成Swagger UI功能 1.安装Swashbuckle.Core包 通过NuGet将Swashbuckle.Core包安装到WebApi项目(或Web项目)中. 2.为WebApi方法 ...
- 如何在 ASP.NET MVC 中集成 AngularJS(1)
介绍 当涉及到计算机软件的开发时,我想运用所有的最新技术.例如,前端使用最新的 JavaScript 技术,服务器端使用最新的基于 REST 的 Web API 服务.另外,还有最新的数据库技术.最新 ...
- iOS原生项目中集成React Native
1.本文的前提条件是,电脑上已经安装了CocoaPods,React Native相关环境. 2.使用Xcode新建一个工程.EmbedRNMeituan [图1] 3.使用CocoaPods安装Re ...
- iOS中集成ijkplayer视频直播框架
ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS, 网上也有很多集成说明, 但是个人觉得还是不够详细, 在这里详细的讲一下在 iOS 中如何集成ijk ...
随机推荐
- FFmpeg开发笔记(二十二)FFmpeg中SAR与DAR的显示宽高比
<FFmpeg开发实战:从零基础到短视频上线>一书提到:通常情况下,在视频流解析之后,从AVCodecContext结构得到的宽高就是视频画面的宽高.然而有的视频文件并非如此,如果按照A ...
- WPF自定义控件,如何使得xaml涉及器中的修改能立即反应到预览
这是我无意中发现的,xaml中设置的是依赖属性而不是包装器,所以我们可以直接在注册依赖属性那里设置回调,触发某个控件重绘,比如本身或父控件重绘. xaml设计器就会实时更新 1 // !!!由于xam ...
- layui 新增行
layui表格新增行目前只在从内存加载数据的情况下可行! 在多方查找数据与实验后,我发现layui确实只能在直接赋值数据(从内存加载数据)的情况下新增行,即首次渲染表格时使用内存数据给表格的data参 ...
- 解决:ModuleNotFoundError: No module named ‘urllib3.packages.six.moves问题
解决方案: 第一步:把selenium版本降到3.3.1 配合urllib3版本1.26.2使用,成功解决 &在python interpreter安装availablePackages se ...
- .NET桌面程序混合开发之二:在原生WinFrom程序中使用WebView2
本文将介绍如何在WinForms中嵌入WebView2,并讲到WebView2的主要特征.点击了解更多WebView2的API. 1. 准备 Visual Studio 2017 及以上版本 WebV ...
- Android项目代码规范
项目代码规范 Android Studio的代码Style检查和inspect Code功能已经很强大,规范只负责代码结构和文件结构 带?的内容为可选或团队内协商内容 核心目标 提高可维护性: MVV ...
- Dockerfile-NGINX镜像制作
1 NGINX镜像制作: 1.1 NGINX-dockerfile FROM centos:7 LABEL maintainer www.chenleilei.net RUN useradd www ...
- 『手撕Vue-CLI』下载指定模板
开篇 经上篇文章的介绍,实现了获取下载目录地址,接下来实现下载指定模板的功能. 背景 通过很多章节过后,已经可以拿到模板名称,模板版本号,下载目录地址,这些信息都是为了下载指定模板做准备的. 实现 如 ...
- 【Effective C++】设计与声明——reference篇
以pass-by-reference-to-const替换pass-by-value 缺省情况下C++以by value方式传递对象至(或来自)函数.除非你另外指定,否则函数参数都是以实际实参的复件( ...
- IceRPC之依赖注入>快乐的RPC
作者引言 很高兴啊,我们来到了IceRPC之依赖注入>快乐的RPC,基础引导,打好基础,才能让自已不在迷茫,快乐的畅游世界. 依赖注入和IceRPC 了解 IceRPC (C#) 如何为依赖注入 ...