当我运行django的测试套件时,我在auth应用程序上遇到错误。我(显然)没有写任何auth代码,我没有为auth编写测试。但是验证测试失败了。以下是我得到的一些错误,整个堆栈跟踪太大了,无法放在这里: 有人曾经处理过此事吗?
AttributeError: 'module' object has no attribute 'handler500'
DoesNotExist: UserProfile matching query does not exist.
----------------------------------------------------------------------
Ran 30 tests in 3.813s
FAILED (errors=17)
Destroying test database...
答案 0 :(得分:4)
我明白了。如果auth应用程序使用复杂的模板来呈现默认的auth模板视图,则会发生auth测试失败的测试。 auth应用程序使用您的应用程序使用的模板测试自身。我已将默认值更改为与我网站其余部分相同的模板。
我在模板中犯的错误:
当我删除基本auth模板上无用的所有内容时,所有auth测试再次成功。
因此,我学到了另一个教训:将模板中的内容和结构分开是很有用的。通过创建base.html模板文件很容易做到这一点,该文件仅定义基本的html页面结构并包含一堆内容块。请参阅下面的示例代码:
下一步是创建一个扩展base.html的base_content.html,并定义用于将内容呈现到页面中的内容块。每页都需要基本的简单内容。
在您的应用中,您扩展了base_content.html并填充剩余的空内容块或使用新内容块覆盖它们。 使用这种技术,可以很容易地创建扩展base_content.html的auth模板 或base.html用于非常基本的身份验证模板,因此大多数(无用的)内容都被遗漏了。
示例base.html
<body>
<div id="header">
{% block mainmenu %}{% endblock %}
</div>
<div id="userbar">
{% block userbar %}{% endblock %}
</div>
<div id="bigcontent">
{% block bigcontent %}{% endblock %}
</div>
</body>
示例base.content
{% extends "base.html" %}
{% load i18n %}
{% block mainmenu %}
...content..
{% endblock %}
现在我应用中的所有模板都扩展了基本内容模板,该模板的内容显示在每个页面上。 这样你就不会重复自己,你的模板代码会变得非常糟糕,只需使用base.content模板,auth视图就会使auth测试成功进行聚合!