问题描述
|
我正在使用Django创建文本文件响应。我正在使用模板文件以常规方式实现它。
def create_file(request):
... create context ...
result = render_to_string(\'template.txt\',context_dict)
response = HttpResponse(result,mimetype=\'text/plain\')
response[\'Content-disposition\'] = \'attachment; filename=file.txt\'
return response
但是,文本文件响应是唯一的,因为文件中的每个字符必须准确定位。因此,文件中的每个字符(包括空格)都是有意放置的。这给行上带有未指定长度的变量的行带来了问题。假设我们有两个变量,它们是字符串,并且在模板中位于同一行。
{{variable1}} {{variable2}}
并且variable2必须出现在文本文件的第5列中。如果不知道variable1占用多少空间,如何为variable2指定确切位置?或者,我只是要解决这个完全错误的问题吗?完全放弃模板并完全在视图中创建文本响应可能会更容易吗?
解决方法
如您所建议,我将在视图中执行此操作。
对于您给出的示例,可以使用
string.ljust
左对齐一个字符串,并根据需要用空格填充。
>>> from string import ljust
>>> variable1 = \"v1\"
>>> variable2 = \"v2\"
>>> ljust(variable1,4)
\'v1 \'
>>> line = \"%s%s\" % (ljust(variable1,4),variable2)
\'v1 v2\'
另外,正如Elf和ΤZΩΤZΙΟΥ在评论中指出的那样,您可以使用%-formatting
>>> from string import ljust
>>> variable1 = \"v1\"
>>> variable2 = \"v2\"
>>> line = \"%-4s%s\" % (variable1,variable2)
\'v1 v2\'
使用.4
将variable1
截断为4个字符:
>>> variable1 = \"12345\"
>>> variable2 = \"v2\"
>>> line = \"%-4s.4%s\" % (variable1,variable2)
\'v1 v2\'
, 是的,完全在视图内创建响应会更容易。模板只是使用静态支架来呈现结构化文本的便捷插件,但对我来说,听起来就像您的结构位于布局中而不是支架中。
实际上,我将通过创建自己的小模板引擎来处理这一特殊情况来做到这一点。有很多Django这样做的例子,以吐出CSV,PDF甚至是Django应用程序生成的图像。
, 类似于(9)(类似于过时的)ѭ10(ѭ10)格式具有以下功能:
\"%6.6s\" % variable # right-justify at most 6 characters prefixing spaces as needed
\"%-6.6s\" % variable # left-justify at most 6 characters appending spaces as needed
\"%-*.*s\" % (width,width,variable) # left-justify at most width characters
但是,我不知道您的模板机制是如何实现的,以及它是否可以使用“ 10”格式。