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

Django访问/test/时test.html内容不显示的原因排查

问题原因及解决办法

问题根源

你在TestPageView中重写了get方法,但完全覆盖了TemplateView原本的核心逻辑——TemplateView的默认get方法会自动渲染你指定的template_name模板,但你现在不管请求是否携带num参数,直接返回了HttpResponse(result)字符串,所以访问/test/时,后端不会渲染test.html,只会返回那个文本内容。

解决方案

方案一:在同一视图中区分请求场景

修改views.py中的TestPageView,判断请求是否携带num参数,分别处理页面渲染和接口响应:

from django.views.generic import TemplateView
from django.http import HttpResponse

class TestPageView(TemplateView):
    template_name = "pages/test.html"
    
    def get(self, request, *args, **kwargs):
        num = request.GET.get('num')
        if num:
            # 携带num参数时,返回接口文本
            result = f"test {num} - status: ok"
            return HttpResponse(result)
        # 无num参数时,调用父类方法渲染模板
        return super().get(request, *args, **kwargs)

方案二:拆分视图(更清晰的职责划分)

将页面展示和数据接口拆分为两个独立视图,避免职责混淆:

  1. 更新views.py,新增接口处理视图:
from django.views.generic import TemplateView
from django.http import HttpResponse

class TestPageView(TemplateView):
    template_name = "pages/test.html"

def test_api(request):
    num = request.GET.get('num')
    result = f"test {num} - status: ok"
    return HttpResponse(result)
  1. 修改urls.py,添加新的URL映射:
from django.urls import path
from .views import HomePageView, AboutPageView, TestPageView, test_api

urlpatterns = [
    path("", HomePageView.as_view(), name="home"),
    path("about/", AboutPageView.as_view(), name="about"),
    path("test/", TestPageView.as_view(), name="test"),
    path("test/api/", test_api, name="test_api"),
]
  1. 调整test.html中的请求地址:
fetch('/test/api/?num=' + i)

这样访问/test/会正常加载页面,点击按钮后请求/test/api/获取数据,逻辑更清晰,也便于后续维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:42:51