def index(request):
review = Review.objects.all()
output = "\n".join([each_review.review_text for each_review in review])
return HttpResponse(output)
我得到的输出是
"This book 1 is very great This book 2 is very great This book 3 is very great This book 4 is very great This book 5 is very great This something is very great"
但它不打印它们之间的新线。如何使用HttpResponse
来实现这一目标?
答案 0 :(得分:6)
默认HttpResponse
有" text / html"作为content-type,html忽略换行符(或者更确切地说将它们视为空格)。
如果你想要一个text / html响应内容,你必须用相应的html标记替换换行符(使用"
"而不是换行或换行每行a""或"
"等)。您还需要将整个内容包装到一个合适的html文档中,IOW添加父级""和""您的内容周围的标签等。
如果纯文本内容类型没问题,只需在回复中设置内容类型标题:
return HttpResponse(output, content_type="text/plain")
所以浏览器知道正确解释和渲染它。
作为旁注:您使用orm和str.join()
的方式效率非常低。
首先,str.join()
采用任何可迭代(只要所有项都是字符串),因此您不需要构建list
- 您可以使用生成器表达式即(通知表达式周围缺少括号):
output = "\n".join(each_review.review_text for each_review in review)
但是,如果您只对模型中的单个字段感兴趣,则加载整个字段并构建模型实例会完全浪费数据库和python代码级别的资源。这里的解决方案是使用QuerySet.value_list()
代替(此处将flat
标志设置为True,因为我们只需要一个字段):
output = "\n".join(Review.objects.values_list("review_text", flat=True))
答案 1 :(得分:2)
你得到一个HTML,所以你应该使用 output = "<br>".join([each_review.review_text for each_review in review])
<pre>
或 output = "\n".join([each_review.review_text for each_review in review])
output = "<pre>{}</pre>".format(output)
{{1}}