大数据

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