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

如何在Django的{% url %}标签中使用JavaScript变量?

问题根源

Django模板标签是服务器端渲染的,页面发送到浏览器前就已经处理完毕;而JavaScript变量是客户端浏览器运行时才生成的。你直接在{% url %}里用JS变量testing,服务器渲染阶段根本识别不到这个变量,自然无法生成正确的URL。

解决方案

方法1:用占位符生成基础URL,再用JS替换

先在模板里生成一个带占位值的URL,之后用JS把占位值替换成目标变量:

<script type="text/javascript">
    const testing = 10;
    // 获取按钮元素
    const nextBtn = document.querySelector('.description__button');
    // 替换URL中的占位符(这里用0作为占位)
    nextBtn.href = nextBtn.href.replace(/0/, testing);
</script>

<a href="{% url 'battlefield:onevsone_trainer_selection' num_trainers=0 %}" class='description__button btn btn__large'>Next ></a>

方法2:直接用JS拼接URL路径

如果URL结构简单,也可以跳过模板标签,直接用JS拼接完整路径:

<script type="text/javascript">
    const testing = 10;
    const nextBtn = document.querySelector('.description__button');
    // 拼接对应urls.py里定义的路径
    nextBtn.href = `/one-vs-one/trainers/${testing}`;
</script>

<a href="#" class='description__button btn btn__large'>Next ></a>

适配动态选中div的场景

如果要根据用户点击的div更新数值,给目标div绑定点击事件即可:

<script type="text/javascript">
    let selectedNum = 10; // 默认选中值
    const nextBtn = document.querySelector('.description__button');
    
    // 给所有可选中的div绑定点击事件
    document.querySelectorAll('.selectable-div').forEach(div => {
        div.addEventListener('click', function() {
            // 从div的data属性中获取数值
            selectedNum = parseInt(this.dataset.num);
            // 更新按钮链接(这里用方法1的替换逻辑)
            nextBtn.href = `{% url 'battlefield:onevsone_trainer_selection' num_trainers=0 %}`.replace(/0/, selectedNum);
        });
    });
    
    // 初始化按钮链接
    nextBtn.href = `{% url 'battlefield:onevsone_trainer_selection' num_trainers=0 %}`.replace(/0/, selectedNum);
</script>

<!-- 示例可选中的div -->
<div class="selectable-div" data-num="5">选择5个训练师</div>
<div class="selectable-div" data-num="10">选择10个训练师</div>

<a href="#" class='description__button btn btn__large'>Next ></a>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:15:37