Django中Pytest登录失败测试报TemplateDoesNotExist错误排查
Django+pytest 登录失败测试触发模板不存在问题的排查方案
可能的原因及解决办法:
缓存污染:pytest或Django的缓存保留了旧的模板路径信息,导致登录失败分支渲染模板时找不到
main_layout.html。复制新文件夹相当于重置了所有缓存,所以问题消失。手动清理缓存即可解决:- 删除项目内所有
__pycache__文件夹和.pyc字节码文件 - 执行
pytest --cache-clear清除pytest的测试缓存
- 删除项目内所有
测试环境模板配置偏差:检查
settings.py中的TEMPLATES配置,确保DIRS列表包含main_layout.html所在的目录。部分项目会为测试环境单独配置settings,可能漏加了模板路径。如果是这种情况,要么修正测试用的settings,要么在测试代码里临时补全路径:import pytest from django.conf import settings @pytest.fixture(autouse=True) def fix_template_dirs(): # 替换成你的模板实际路径 settings.TEMPLATES[0]['DIRS'].append('./templates')视图分支逻辑不一致:虽然手动测试正常,但要确认测试用例的请求是否触发了和手动操作完全相同的视图分支。比如测试里的请求参数是否有遗漏、格式是否和前端提交的一致,导致视图渲染了未正确继承
main_layout.html的模板。可以在测试里打印响应使用的模板列表,验证实际渲染的模板:def test_login_failed(client): resp = client.post('/login/', {'username': 'invalid', 'password': 'invalid'}) print("渲染的模板列表:", [t.name for t in resp.templates]) assert resp.status_code == 200
内容的提问来源于stack exchange,提问作者MontyPython00
相关产品推荐
相关产品推荐

