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

Django发起Ajax请求时如何正确引入指定HTML模板文件?

失效原因

Django的模板标签{% include %}是服务端渲染阶段执行的逻辑,页面返回给浏览器后模板引擎就不再工作了。你写在Ajax回调里的模板标签不会被解析,只会被当成普通字符串处理,因此无法实现预期效果。

最优实现方案

你不需要拆分模板内容到当前文件,只需要通过后端接口返回渲染后的模板片段即可,步骤如下:

方案1:新增独立接口返回模板片段(逻辑更清晰)

  1. 新增视图函数,专门返回渲染后的recommendations.html内容
# views.py
from django.shortcuts import render, get_object_or_404
from .models import Project

def get_project_recommendations(request, project_id):
    project = get_object_or_404(Project, id=project_id)
    # 传入模板需要的所有上下文参数,和普通模板渲染逻辑一致
    return render(request, 'projects/recommendations.html', {"project": project})
  1. 绑定对应路由
# urls.py
urlpatterns = [
    # 其他现有路由
    path("project/<int:project_id>/recommendations/", get_project_recommendations, name="project-recommendations"),
]
  1. 修改前端Ajax代码,直接将接口返回的内容插入目标区域
$.ajax({
    url: "{% url 'project-recommendations' project_object.id %}",
    type: 'get',
    success: function (response) {
        $("#div1").html(response);
    }
})

方案2:复用现有project-detail接口(无需新增路由)

如果不想新增独立接口,可以在原有视图中加Ajax请求判断,返回不同内容:

# 你原来的project-detail视图
def project_detail(request, project_id):
    project = get_object_or_404(Project, id=project_id)
    context = {"project_object": project}
    # 判断是否为Ajax请求
    if request.headers.get('x-requested-with') == 'XMLHttpRequest':
        return render(request, 'projects/recommendations.html', context)
    # 非Ajax请求返回完整页面
    return render(request, 'projects/project_detail.html', context)

前端直接请求原有接口即可,不需要改Ajax的url参数。

注意事项

如果recommendations.html内有绑定的DOM事件,动态插入到页面后原有事件会失效,建议使用事件委托绑定,或者在Ajax的success回调中重新绑定事件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:57:02