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

如何使用Django Template获取HTML标签属性并实现单选按钮切换单位显示

实现Django根据单选按钮切换单位显示的方案

我来帮你搞定这个单位切换的需求~其实Django模板本身没法直接实时获取前端HTML标签的属性,因为模板是服务端渲染好再发给浏览器的,所以得通过「前端传值给后端,后端再返回对应数据」的方式来实现。下面分两种常用的方法给你讲:

方法一:表单提交(页面刷新式切换)

这种方式比较简单,通过传统的表单提交把选中的单位传给后端,后端根据选择渲染对应单位。

1. 完善前端表单(index.html)

修改你的表单,给单选按钮加上value属性,同时用Django模板标签控制默认选中状态:

<form method="POST" action="{% url 'unit_switch_view' %}">
    {% csrf_token %}
    <label class="radio-inline">
        <input id="English" type="radio" name="unit_system" value="english" {% if selected_unit == 'english' %}checked{% endif %}>
        <p>English</p>
    </label>
    <label class="radio-inline">
        <input id="Metric" type="radio" name="unit_system" value="metric" {% if selected_unit == 'metric' %}checked{% endif %}>
        <p>Metric</p>
    </label>
    <button type="submit">Apply</button>
</form>

<!-- 显示对应单位 -->
<div class="unit-info">
    <p>距离单位:{{ units.distance }}</p>
    <p>重量单位:{{ units.weight }}</p>
</div>

2. 后端视图处理(views.py)

在视图里接收前端提交的单位选择,根据选择准备对应的数据传给模板:

from django.shortcuts import render

def unit_switch_view(request):
    # 默认选中English,所以默认值设为'english'
    selected_unit = request.POST.get('unit_system', 'english')
    
    # 根据选中的单位定义对应单位
    if selected_unit == 'english':
        units = {
            'distance': 'Miles',
            'weight': 'Pounds'
        }
    else:
        units = {
            'distance': 'Kilometers',
            'weight': 'Kilograms'
        }
    
    # 把选中状态和单位数据传给模板
    return render(request, 'index.html', {
        'selected_unit': selected_unit,
        'units': units
    })

3. 配置URL

记得在urls.py里给这个视图配置对应的路由:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.unit_switch_view, name='unit_switch_view'),
]

方法二:AJAX无刷新切换

如果不想刷新页面,就用AJAX实现实时切换,用户体验更好。

1. 前端修改(index.html)

保留单选按钮,添加AJAX请求来获取单位数据,不用刷新页面:

<form>
    {% csrf_token %}
    <label class="radio-inline">
        <input id="English" type="radio" name="unit_system" value="english" {% if selected_unit == 'english' %}checked{% endif %}>
        <p>English</p>
    </label>
    <label class="radio-inline">
        <input id="Metric" type="radio" name="unit_system" value="metric" {% if selected_unit == 'metric' %}checked{% endif %}>
        <p>Metric</p>
    </label>
</form>

<!-- 用来显示单位的容器 -->
<div id="unit-display">
    <p>距离单位:{{ units.distance }}</p>
    <p>重量单位:{{ units.weight }}</p>
</div>

<script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
<script>
    // 监听单选按钮的变化事件
    $('input[name="unit_system"]').change(function() {
        var selectedUnit = $(this).val();
        // 发送AJAX请求到后端
        $.ajax({
            type: 'POST',
            url: '{% url "ajax_unit_switch" %}',
            data: {
                'unit_system': selectedUnit,
                'csrfmiddlewaretoken': $('input[name=csrfmiddlewaretoken]').val()
            },
            success: function(response) {
                // 成功获取数据后更新页面内容
                $('#unit-display').html(`
                    <p>距离单位:${response.distance}</p>
                    <p>重量单位:${response.weight}</p>
                `);
            }
        });
    });
</script>

2. 后端AJAX视图(views.py)

新增一个视图专门处理AJAX请求,返回JSON格式的单位数据:

from django.http import JsonResponse

def ajax_unit_switch(request):
    if request.method == 'POST':
        selected_unit = request.POST.get('unit_system', 'english')
        # 根据选择返回对应单位
        if selected_unit == 'english':
            data = {
                'distance': 'Miles',
                'weight': 'Pounds'
            }
        else:
            data = {
                'distance': 'Kilometers',
                'weight': 'Kilograms'
            }
        return JsonResponse(data)
    # 非POST请求返回错误
    return JsonResponse({'error': '无效请求'}, status=400)

3. 配置AJAX路由

在urls.py里添加AJAX视图的路由:

urlpatterns = [
    path('', views.unit_switch_view, name='unit_switch_view'),
    path('ajax/unit-switch/', views.ajax_unit_switch, name='ajax_unit_switch'),
]

关键说明

Django模板是服务端渲染的,渲染完成后就会发送到浏览器,所以它没法直接获取前端实时的HTML标签属性(比如单选按钮是否被选中)。必须通过表单提交或AJAX把前端的选择传递给后端,后端再根据选择返回对应的数据,最终在页面上显示出来。

内容的提问来源于stack exchange,提问作者N.Thompson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:32:42