文章
django-vite集成HTMX、Alpine.js、daisyUI、Flowbite
前置教程:
一、安装daysiUI
1、安装
https://daisyui.com/docs/intro
npm i -D daisyui@latest
2、添加daisyUI到main.css
static/css/main.css
@import "tailwindcss";
@plugin "daisyui";
3、修改settings.py
DJANGO_VITE = {
"default": {
"dev_mode": True
}
}
4、运行vite
npm run dev
二、安装Flowbite
1、安装
npm install flowbite
2、修改main.js
import "@/css/main.css";
import "flowbite"
import {sayHello} from "./important";
console.log("Hello from Vite")
sayHello("Tom")
修改后html模板就可以使用flowbite的组件了
三、安装HTMX
1、安装
https://flowbite.com/docs/getting-started/introduction
npm install htmx.org@2.0.6
2、修改main.js
import "@/css/main.css";
import "flowbite"
import htmx from "htmx.org";
// 全局配置
window.htmx = htmx
// import {sayHello} from "./important";
//
// console.log("Hello from Vite")
// sayHello("Tom")
3、示例
index.html
{% extends 'base.html' %}
{% block content %}
Hello
<button class="btn btn-primary"
id="click"
hx-get="{% url 'index' %}"
hx-select="#click"
hx-swap="outerHTML">
Default
</button>
{% endblock %}
四、安装Alpine.js
https://alpinejs.dev/start-here
1、安装
npm install alpinejs
2、修改main.js
import "@/css/main.css";
import "flowbite"
import htmx from "htmx.org";
import Alpine from 'alpinejs'
window.Alpine = Alpine
Alpine.start()
// 全局配置
window.htmx = htmx
// import {sayHello} from "./important";
//
// console.log("Hello from Vite")
// sayHello("Tom")
3、示例
index.html
{% extends 'base.html' %}
{% block content %}
Hello
<div x-data="{showToast: false}">
<button class="btn btn-primary"
id="click"
hx-get="{% url 'index' %}"
hx-select="#click"
hx-swap="outerHTML"
@click="showToast = !showToast"
>
Default
</button>
<div x-show="showToast" id="toast-interactive"
class="w-full max-w-xs p-4 text-gray-500 bg-white rounded-lg shadow-sm dark:bg-gray-800 dark:text-gray-400"
role="alert">
<div class="flex">
<div class="inline-flex items-center justify-center shrink-0 w-8 h-8 text-blue-500 bg-blue-100 rounded-lg dark:text-blue-300 dark:bg-blue-900">
<svg class="w-4 h-4" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 18 20">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M16 1v5h-5M2 19v-5h5m10-4a8 8 0 0 1-14.947 3.97M1 10a8 8 0 0 1 14.947-3.97"/>
</svg>
<span class="sr-only">Refresh icon</span>
</div>
<div class="ms-3 text-sm font-normal">
<span class="mb-1 text-sm font-semibold text-gray-900 dark:text-white">Update available</span>
<div class="mb-2 text-sm font-normal">A new software version is available for download.</div>
<div class="grid grid-cols-2 gap-2">
<div>
<a href="#"
class="inline-flex justify-center w-full px-2 py-1.5 text-xs font-medium text-center text-white bg-blue-600 rounded-lg hover:bg-blue-700 focus:ring-4 focus:outline-none focus:ring-blue-300 dark:bg-blue-500 dark:hover:bg-blue-600 dark:focus:ring-blue-800">Update</a>
</div>
<div>
<a href="#"
class="inline-flex justify-center w-full px-2 py-1.5 text-xs font-medium text-center text-gray-900 bg-white border border-gray-300 rounded-lg hover:bg-gray-100 focus:ring-4 focus:outline-none focus:ring-gray-200 dark:bg-gray-600 dark:text-white dark:border-gray-600 dark:hover:bg-gray-700 dark:hover:border-gray-700 dark:focus:ring-gray-700">Not
now</a>
</div>
</div>
</div>
<button type="button"
class="ms-auto -mx-1.5 -my-1.5 bg-white items-center justify-center shrink-0 text-gray-400 hover:text-gray-900 rounded-lg focus:ring-2 focus:ring-gray-300 p-1.5 hover:bg-gray-100 inline-flex h-8 w-8 dark:text-gray-500 dark:hover:text-white dark:bg-gray-800 dark:hover:bg-gray-700"
data-dismiss-target="#toast-interactive" aria-label="Close">
<span class="sr-only">Close</span>
<svg class="w-3 h-3" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 14 14">
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6"/>
</svg>
</button>
</div>
</div>
</div>
{% endblock %}
五、生产环境
1、打包前端代码
npm run build
2、django收集静态文件
python manage.py collectstatic
3、修改settings.py
DJANGO_VITE = {
"default": {
"dev_mode": False
}
}
4、重启django
python manage.py runserver