簡體   English   中英

如何在R xtable的django html渲染中刪除\\ n字符?

[英]How do I remove \n characters in django html rendering of an R xtable?

我有一個在R中生成的xtable ,我想將其插入Django的模板中。

django視圖的文件my_view.py是:

def my_view(request):
    mtcars = open('mtcars.html').readlines()
    context = {'mtcars':mtcars}
    return render(request, 'my_view.html', context)

因此,當在Python中使用readlines()時, R中呈現的xtable就會出現:

['<!-- html table generated in R 3.1.2 by xtable 1.7-4 package -->\n',
 '<!-- Sun Jan 18 13:32:17 2015 -->\n',
 '<table border=1>\n',
 '<tr> <th>  </th> <th> mpg </th> <th> cyl </th> <th> disp </th> <th> hp </th> <th> drat </th> <th> wt </th> <th> qsec </th> <th> vs </th> <th> am </th> <th> gear </th> <th> carb </th>  </tr>\n',
 '  <tr> <td align="right"> Mazda RX4 </td> <td align="right"> 21.00 </td> <td align="right"> 6.00 </td> <td align="right"> 160.00 </td> <td align="right"> 110.00 </td> <td align="right"> 3.90 </td> <td align="right"> 2.62 </td> <td align="right"> 16.46 </td> <td align="right"> 0.00 </td> <td align="right"> 1.00 </td> <td align="right"> 4.00 </td> <td align="right"> 4.00 </td> </tr>\n',
 '  <tr> <td align="right"> Mazda RX4 Wag </td> <td align="right"> 21.00 </td> <td align="right"> 6.00 </td> <td align="right"> 160.00 </td> <td align="right"> 110.00 </td> <td align="right"> 3.90 </td> <td align="right"> 2.88 </td> <td align="right"> 17.02 </td> <td align="right"> 0.00 </td> <td align="right"> 1.00 </td> <td align="right"> 4.00 </td> <td align="right"> 4.00 </td> </tr>\n',

模板文件my_view.html是:

{% extends 'base.html' %}

{% block content %}
    {{mtcars|safe}}
{% endblock %}

問題在於, safe渲染會占用文件中的所有行並顯示\\n字符,如下所示:

在此處輸入圖片說明

我嘗試通過在Python中替換\\n來解決此問題,但最終出現了空列表行'' 如果我將文件.read() ,則整個內容將作為注釋呈現(第一行為<!-- )。

有沒有一種方法可以控制html表的django safe渲染以刪除\\n還是有更好的方法插入html表?

注意: html表是動態生成的,否則我會直接將其嵌入(將文本嵌入模板時會適當呈現)。

只需使用read()而不是readlines()可以了。 問題是您傳遞的是列表而不是字符串,並且沒有打開列表的包裝。

所以選項是這樣的視圖:

def my_view(request):
    mtcars = open('mtcars.html').read()
    context = {'mtcars': mtcars}
    return render(request, 'my_view.html', context)

或像這樣的模板:

{% extends 'base.html' %}

{% block content %}
{% for row in mtcars %}
    {{ row|safe }}
{% endfor %}
{% endblock %}

您可以使用.strip()方法從字符串的開頭和結尾刪除所有空格:

>>> '   \n\r\n\ntest\n   \r\n   \n'.strip()
'test'

在您的情況下,這將是:

def my_view(request):
    mtcars = open('mtcars.html').readlines()
    context = {'mtcars': [mtcar.strip() for mtcar in mtcars]}
    return render(request, 'my_view.html', context)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM