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

Django视图测试报错AssertionError:未使用模板渲染响应

Django测试视图遇到AssertionError: No templates used to render the response问题解决

作为Django测试新手,我在测试视图时碰到了AssertionError: No templates used to render the response错误,现将相关代码和解决方法分享出来,帮到有需要的人。

相关代码

views.py

def all_programs(request):
    programs = Program.objects.all()
    return render(request, 'orders/all_programs.html', {'programs': programs})


def checkout(request, slug):
    if request.method == 'POST':
        # get data from form and save it

    program = get_object_or_404(Program, slug=slug)
    dates = ProgramDate.objects.filter(program=program)
    return render(request, 'orders/checkout.html', {'program': program, 'dates': dates})

urls.py

from django.urls import path
from django.views.generic import RedirectView
from .views import *

app_name = 'orders'

urlpatterns = [
    path('', RedirectView.as_view(url='https://www.another-website.net')),
    path('tests/', all_programs, name='all_programs'),
    path('checkout/<str:slug>/', checkout, name='checkout'),
    path('checkout/return_page/', ReturnPage.as_view(), name='return_page'),
]

test_views.py(出错版本)

from django.test import TestCase
from django.shortcuts import reverse


class TestViews(TestCase):
    
    def test_all_programs(self):
        response = self.client.get(reverse('orders:all_programs'))
        self.assertTemplateUsed(response, 'orders/all_programs.html')

    def test_checkout(self):    # error is here
        response = self.client.get(reverse('orders:all_programs', kwargs={'slug': 'test'}))     # I tried this  
        # response = self.client.get('http://127.0.0.1:8000/checkout/test/')    #and this
        self.assertTemplateUsed(response, 'orders/checkout.html')

问题原因与解决方法

  1. URL反转错误:test_checkout方法里调用reverse时,错误使用了orders:all_programs,应该对应checkout视图的名称orders:checkout。
  2. 缺少测试数据:视图里用了get_object_or_404(Program, slug=slug),如果数据库里没有对应slug的Program实例,请求会返回404响应,不会渲染目标模板。

修正后的test_checkout方法:

def test_checkout(self):
    # 创建测试用的Program实例
    program = Program.objects.create(slug='test', name='测试课程')
    # 正确反转checkout的URL
    response = self.client.get(reverse('orders:checkout', kwargs={'slug': 'test'}))
    self.assertTemplateUsed(response, 'orders/checkout.html')

另外,即使直接用硬编码URL访问/checkout/test/,如果没有提前创建对应数据,同样会触发404,导致模板未渲染的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:48:21