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

如何点击按钮调用Django函数且不刷新页面?是否有仅用Django/Python的方案

核心结论

首先明确:不存在完全仅靠Django后端Python代码就能实现的方案。是否重载页面是浏览器的前端默认行为,必须通过前端逻辑拦截默认跳转/提交行为才能实现无刷新交互,完全脱离前端代码不可能做到。

但如果你的需求是不想手写AJAX/jQuery代码,可以用以下纯HTML原生能力配合Django实现,全程不需要写JS代码:

方案:隐藏iframe实现无刷新提交

这个方案利用HTML原生的form提交到隐藏iframe的特性,不会触发当前页面刷新,完全不需要引入额外前端库,也不需要自己写AJAX逻辑,只需要配合Django正常配置路由和视图即可。

模板代码示例

<!-- 首先在页面任意位置添加一个隐藏的iframe,用来承接form的提交结果 -->
<iframe name="hidden_submit_frame" style="display: none;"></iframe>

<!-- 按钮放在form标签内,target属性指向上面的iframe -->
<form action="{% url '你配置的视图路由名称' %}" method="post" target="hidden_submit_frame">
    {% csrf_token %}
    <!-- 可以在这里添加需要传递给后端的隐藏参数 -->
    <input type="hidden" name="param1" value="你要传递的参数值">
    <button type="submit">点击调用后端函数</button>
</form>

视图代码示例

视图代码不需要做特殊适配,和普通接口写法完全一致:

from django.http import HttpResponse
from django.views.decorators.http import require_http_methods

@require_http_methods(["POST"])
def your_view_func(request):
    # 这里写你要执行的逻辑
    param = request.POST.get("param1")
    print(f"收到参数:{param}")
    # 可以返回任意内容,不会渲染到当前用户页面
    return HttpResponse("执行完成")

补充说明

如果后续需要在后端函数执行完成后,更新当前页面的部分内容,只需要在视图返回的内容中加几行简单的JS操作父页面DOM即可,比如:

return HttpResponse("""
<script>
parent.document.getElementById('提示框的ID').innerText = '操作成功';
</script>
""")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:18:01