Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在django模板中输出转义字符_Django_Templates_Csv_Escaping - Fatal编程技术网

在django模板中输出转义字符

在django模板中输出转义字符,django,templates,csv,escaping,Django,Templates,Csv,Escaping,我想使用django模板系统输出类似csv的数据,如下所示: !connection%block !dosomething !dosomethingelse My,Header,Row,Which,Is,Comma,Seperated All,My,Comma,Seperated,Data All,My,Comma,Seperated,Data All,My,Comma,Seperated,Data All,My,Comma,Seperated,Data !Footerblock !that h

我想使用django模板系统输出类似csv的数据,如下所示:

!connection%block
!dosomething
!dosomethingelse
My,Header,Row,Which,Is,Comma,Seperated
All,My,Comma,Seperated,Data
All,My,Comma,Seperated,Data
All,My,Comma,Seperated,Data
All,My,Comma,Seperated,Data
!Footerblock
!that has footer information
实际的模板如下所示:

!connection%special@oracleconnectionstring
id,account,product,quantity,price,date
{% for r in records %}
    {{ r.id }},{{ r.account }},{{ r.product }},{{ r.quantity }},{{ r.price }}
{% endfor %}
!endtransactions
csv的建议使用csv模块或模板。我的特殊需求更适合模板,因为一些模型字段需要使用我创建的标记库进行一些操作

我的观点很简单

result['transactions'] = Transasctions.objects.all()
rendered = render_to_string('trans.csv', result)
response =  HttpResponse(rendered , mimetype='text/csv')

response['Content-Disposition'] = 'attachment; filename=trans.csv'
return response

但是,渲染的模板无法实际输出DOS CRLF换行符,因此整个文件是一条长行!必须有一种方法可以输出\r\n字符…

我建议您使用csv模块。您可以更改和定义方言、引用等。如果选择模板,引用可能有点棘手

至于您的问题,请尝试以下方法:

return render\u to\u response('trans.csv',{'transactions':transactions.objects.all(),“newline\u char”:“\n”},mimetype='text/csv')

在模板中:


{%for transactions%}{{row.name_of_field1}{{{row.name_of_field2}}{{row.name_of_field3}}。。。{{newline_char}{%endfor%}

我建议您使用csv模块。您可以更改和定义方言、引用等。如果选择模板,引用可能有点棘手

至于您的问题,请尝试以下方法:

return render\u to\u response('trans.csv',{'transactions':transactions.objects.all(),“newline\u char”:“\n”},mimetype='text/csv')

在模板中:


{%for transactions%}{{row.name_of_field1}{{{row.name_of_field2}}{{row.name_of_field3}}。。。{{newline_char}{%endfor%}

使用
render_to_string
而不是
render_to_response
,并使用普通的TXT文件而不是html文件作为模板。它将保存有关换行符等的数据。

使用
呈现到字符串
而不是
呈现到响应
,并且作为模板使用普通TXT文件而不是html文件。它将保存有关换行符等的数据。

Django模板系统通常不会删除换行符。你的模板中有{%spaceless%}吗?如果没有,trans.csv文件中的任何换行符都应该在响应中输出。但是,要纠正这些类型的空白问题可能很棘手,因为空格和缩进模板代码的方式可能与您希望输出的间距不同


在这里共享trans.csv将更容易对正在发生的事情进行评论。

Django模板系统通常不会删除换行符。你的模板中有{%spaceless%}吗?如果没有,trans.csv文件中的任何换行符都应该在响应中输出。但是,要纠正这些类型的空白问题可能很棘手,因为空格和缩进模板代码的方式可能与您希望输出的间距不同


在这里共享trans.csv将更容易对正在发生的事情进行评论。

您当前的
trans.csv
模板是什么样子的?我在上面进行了编辑以显示我的模板-无论我做什么,我都无法让新行正常工作:/n您当前的
trans.csv
模板是什么样子的?我在上面进行了编辑以显示我的模板模板-无论我做什么,我都无法使新行正常工作:/Thank for the reply,但这只是在文本文件中输出一个“\n”Thank for the reply,但这只是在文本文件中输出一个“\n”{%spaceless%}正如上面的模板所示-我发现输出是unix新行而不是windows新行!然后简单地添加:rendered=rendered.replace(“\n”,“\r\n”)到您的视图函数中。没有{%spaceless%},正如上面的模板所示-我发现的是输出是unix新行而不是windows新行!然后只需将:rendered=rendered.replace(“\n”,“\r\n”)添加到视图函数中即可。