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)
方案二:拆分视图(更清晰的职责划分)
将页面展示和数据接口拆分为两个独立视图,避免职责混淆:
- 更新
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)
- 修改
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"), ]
- 调整
test.html中的请求地址:
fetch('/test/api/?num=' + i)
这样访问/test/会正常加载页面,点击按钮后请求/test/api/获取数据,逻辑更清晰,也便于后续维护。
内容的提问来源于stack exchange,提问作者Kenion
相关产品推荐
相关产品推荐

