當我在功能測試中使用硒進行渲染時,我得到了不同的模板結果。通常訪問頁面,我看到對象被渲染。在功能測試期間,頁面是空白的(它甚至不會在空子句中顯示文本)。我編寫了一個小型的Django應用程序來測試它,並確保我不會發瘋,並且我得到了相同的問題一貫。Django模板中的反向關係呈現零星
該機型:
class M(models.Model):
pass
class N(models.Model):
m = models.ForeignKey(
M,
null=True,
default=None,
)
的視圖:
def view_my_problem(request):
ms = M.objects.all()
context = {'ms': ms}
return render(request, 'my_problem_template.html', context)
模板:
<html>
{% for m in ms %}
{% for n in m.n_set.all %}
{{ n }}
{% empty %}
THIS IS EMPTY
{% endfor %}
{% endfor %}
</html>
並且測試的一個問題(失敗「的AssertionError:'N對象不在''「中找到):
class FunctionalTest(StaticLiveServerTestCase):
@classmethod
def setUpClass(cls):
for arg in sys.argv:
if 'liveserver' in arg:
cls.server_url = 'http://' + arg.split('=')[1]
return
super().setUpClass()
cls.server_url = cls.live_server_url
@classmethod
def tearDownClass(cls):
if cls.server_url == cls.live_server_url:
super().tearDownClass()
def setUp(self):
self.browser = webdriver.Firefox()
self.browser.implicitly_wait(10)
def tearDown(self):
self.browser.close()
def test_my_problem(self):
m = M()
m.save()
n = N(m=m)
n.save()
self.assertEqual(N.objects.count(), 1)
self.assertEqual(M.objects.count(), 1)
self.assertEqual(m.n_set.count(), 1)
text = self.browser.find_element_by_tag_name('html').text
self.assertIn('N object', text)
但在測試中手動渲染模板可以正常工作。和正常訪問頁面(不是在運行測試時)一樣正常工作。我可以在視圖中提前編寫值,然後遍歷常量,但我很好奇爲什麼這不起作用。這裏發生了什麼?
但是當你做測試時它會呈現什麼? –
@ShangWang上面,我說它失敗了,在''「中找不到」AssertionError:'N object'。所以它呈現一個空白字符串。 (它期望找到'N對象',但是會找到'')。(編輯:正如Vladmir在下面指出的那樣,我錯過了實際獲取url的方式。所以,我無法重現我的軟件在這個例子中遇到的問題。故障。) – Terrence