You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Django代码实现HTML背景色切换并持久化保存用户设置

这个需求完全可以实现,以下是可直接复用的实现方案:

实现核心逻辑

将用户的深色模式偏好存储在Django后端,页面加载时由模板读取偏好值渲染对应样式,用户点击按钮后发请求给views.py更新偏好值,实现状态持久化。

具体实现步骤

步骤1:配置存储逻辑

根据你的用户场景二选一即可:

  • 针对已登录用户:在用户模型新增深色模式标识字段,models.py示例:
from django.db import models
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    dark_mode = models.BooleanField(default=False)

添加后执行python manage.py makemigrations和python manage.py migrate更新数据库。

  • 针对未登录用户:直接使用Django自带的session存储即可,无需修改模型。

步骤2:编写views.py逻辑

from django.shortcuts import render
from django.http import JsonResponse

# 现有页面视图,把深色模式状态传给模板
def your_page_view(request):
    if request.user.is_authenticated:
        dark_mode = request.user.dark_mode
    else:
        dark_mode = request.session.get('dark_mode', False)
    return render(request, 'your_page.html', {'dark_mode': dark_mode})

# 切换深色模式的接口
def toggle_dark_mode(request):
    if request.method == 'POST':
        if request.user.is_authenticated:
            # 更新用户表的偏好设置
            request.user.dark_mode = not request.user.dark_mode
            request.user.save()
            current_mode = request.user.dark_mode
        else:
            # 更新session存储的偏好设置
            current_mode = not request.session.get('dark_mode', False)
            request.session['dark_mode'] = current_mode
        return JsonResponse({'status': 'success', 'dark_mode': current_mode})

步骤3:配置urls.py路由

from django.urls import path
from . import views

urlpatterns = [
    # 你的现有页面路由
    path('', views.your_page_view, name='your_page'),
    # 新增切换深色模式的路由
    path('toggle-dark-mode/', views.toggle_dark_mode, name='toggle_dark_mode'),
]

步骤4:编写HTML模板逻辑

<!DOCTYPE html>
<html>
<head>
    <style>
        /* 深色模式自定义样式 */
        body.dark {
            background-color: #1a1a1a;
            color: #f0f0f0;
        }
    </style>
</head>
<!-- 页面加载时直接根据后端传的状态渲染样式 -->
<body class="{% if dark_mode %}dark{% endif %}">
    <button id="darkModeBtn">切换深色模式</button>

    <script>
        const toggleBtn = document.getElementById('darkModeBtn');
        toggleBtn.addEventListener('click', () => {
            // 发送请求给后端更新状态
            fetch("{% url 'toggle_dark_mode' %}", {
                method: 'POST',
                headers: {
                    'X-CSRFToken': '{{ csrf_token }}',
                    'Content-Type': 'application/json'
                }
            })
            .then(res => res.json())
            .then(data => {
                // 实时切换页面样式
                document.body.classList.toggle('dark', data.dark_mode);
            })
        })
    </script>
</body>
</html>

如果需要支持匿名用户关闭浏览器后再次打开依然保留设置,只需要在前端把偏好值同时存在localStorage,页面加载时优先读取localStorage的值和后端同步即可,逻辑完全一致。

内容的提问来源于stack exchange,提问作者Kronox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:15:03