gpt4 book ai didi

python - Render_to_string 和 response.content.decode() 不匹配

转载 作者:太空狗 更新时间:2023-10-29 14:14:15 25 4
gpt4 key购买 nike

我正在按照本书的顺序编写我的第一个 Django 应用程序:

http://chimera.labs.oreilly.com/books/1234000000754/ch05.html#_passing_python_variables_to_be_rendered_in_the_template

书中有一个测试验证 html 是否按预期返回。这是测试:

def test_home_page_returns_correct_html(self):
request = HttpRequest()
response = home_page(request)
expected_html = render_to_string('home.html')
print(expected_html)
print(response.content.decode())
self.assertEqual(response.content.decode(), expected_html)

我的测试在 assertEqual 测试中失败,因为我使用 Django 模板语言 在我的 HTML 中添加了一个 csrf token 。这是我的 HTML 页面的样子:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>To-Do lists</title>
</head>
<body>
<h1>Your To-Do list</h1>
<form method="POST">
<input name="item_text" id="id_new_item" placeholder="Enter a to-do item"/>
{% csrf_token %}
</form>

<table id="id_list_table">
<tr><td>{{ new_item_list }}</td></tr>
</table>
</body>
</html>

由于 render_to_string 方法不包含 token ,我的断言失败了。以下是我的测试打印出的两个 print 语句:

F<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>To-Do lists</title>
</head>
<body>
<h1>Your To-Do list</h1>
<form method="POST">
<input name="item_text" id="id_new_item" placeholder="Enter a to-do item"/>

</form>

<table id="id_list_table">
<tr><td></td></tr>
</table>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>To-Do lists</title>
</head>
<body>
<h1>Your To-Do list</h1>
<form method="POST">
<input name="item_text" id="id_new_item" placeholder="Enter a to-do item"/>
<input type='hidden' name='csrfmiddlewaretoken' value='VAiGvXZLHCjxWEWdjhgQRBwBSnMVoIWR' />
</form>

<table id="id_list_table">
<tr><td></td></tr>
</table>
</body>
</html>
F.

他在书上没有这个问题(他使用的是1.8),所以我想知道方法行为是否发生了变化,或者我将如何编写这个测试才能通过。

最佳答案

request 参数已添加到 render_to_string在 Django 1.8 中。您可以尝试将测试中的行更改为:

expected_html = render_to_string('home.html', request=request)

只需要在 Django 1.9+ 中进行此更改,在 Django 1.8 中无需请求即可通过测试。

关于python - Render_to_string 和 response.content.decode() 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35928559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com