Форматирование flask -таблицы вывода с html на python - PullRequest
1 голос
/ 05 мая 2020

Не очень опытный пользователь с python здесь, просто взял python, оставаясь дома. Я искал возможность интеграции вывода flask -таблицы на веб-сайт. Ниже приведен мой код python, который создает простую таблицу для моего веб-сайта.

    from flask_table import Table, Col

    app = Flask(__name__)

    class ItemTable(Table):
        name = Col('Name')
        description = Col('Description')

    Class Item(object):
        def __init__(self, name, description):
            self.name = name
            self.description = description

    items = [dict(name='Name1', description='Description1'),
             dict(name='Name2', description='Description2'),
             dict(name='Name3', description='Description3')]

    table = ItemTable(items)


    @app.route("/")
    def hello():
        return render_template('index.html', tStrToLoad=table.__html__())

    if __name__ == "__main__":
        app.run()

и мой html код, который принимает tStrToLoad из python кода выше для отображения.

<html>
    <head>
        <title>Test Flask Table</title>
        <style>
            body 
            {
                background-color: #000000;
                color: #FFFFFF;
                font-family:Verdana;
                font-size:16px;
            }
            table, th, td
            {
                border: 1px solid #0088ff;
                border-collapse: collapse;
                padding: 3px;
                font-family:Verdana;
                font-size:12px;
                text-align: left;
            }

        </style>
    </head>
    <body>
        a simple test table
        <br/><br/>

        {{ tStrToLoad }}

    </body>
</html>

И вместо того, чтобы показывать таблицу с данными, у меня есть следующий вывод на черном фоне

a simple test table

<table> <thead><tr><th>Name</th><th>Description</th></tr></thead> <tbody> <tr><td>Name1</td><td>Description1</td></tr> <tr><td>Name2</td><td>Description2</td></tr> <tr><td>Name3</td><td>Description3</td></tr> </tbody> </table>

После дальнейшего исследования я сделал исходный код страницы просмотра, это мой фактический html код, который возникает из этого.

<html>
    <head>
        <title>Test Flask Table</title>
        <style>
            body 
            {
                background-color: #000000;
                color: #FFFFFF;
                font-family:Verdana;
                font-size:16px;
            }
            table, th, td
            {
                border: 1px solid #0088ff;
                border-collapse: collapse;
                padding: 3px;
                font-family:Verdana;
                font-size:12px;
                text-align: left;
            }

        </style>
    </head>
    <body>
        a simple test table
        <br/><br/>

        &lt;table&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Name&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Name1&lt;/td&gt;&lt;td&gt;Description1&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Name2&lt;/td&gt;&lt;td&gt;Description2&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Name3&lt;/td&gt;&lt;td&gt;Description3&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

    </body>
</html>

Мой вопрос как мне правильно отформатировать его в моем сценарии python, чтобы он отправлял <</em> и > вместо & lt; и & gt;

1 Ответ

0 голосов
/ 06 мая 2020

Если вы уверены, что ни одна из данных в таблице не содержит непроверенных данных, введенных пользователем, скажите Jinja, чтобы он не выходил из html:

{{ tStrToLoad | safe }}

Однако вы можете использовать sh, чтобы избежать использования Flask -таблиц, и просто передайте список элементов самостоятельно. Код шаблона может стать более универсальным c, если вы также передадите несколько заголовков в отдельный список:

        headers = ['Name','Description']
        return render_template('index.html',
                               headers = headers,
                               objects = items)

Затем вручную создайте таблицу:

{% if objects %}
  <table id='result' class='display'>
    <thead>
      <tr>
      {% for header in headers %}
        <th>{{header}}</th>
      {% endfor %}
      </tr>
    </thead>

    <tbody>
    {% for object in objects %} 
      <tr>
    {% for k, val in object.items() %}
        <td>{{val}}</td>
      {% endfor %}
      </tr>
    {% endfor %}        
    </tbody>
  </table>
{% endif %}

Как видите, это избавляет вас от необходимости жестко закодировать любые значения в шаблоне.

Синтаксис этой таблицы также совместим с таблицами данных, поэтому вы, если вы загружаете файлы CSS и JS в соответствии с нулевая конфигурация пример, тогда ваша таблица станет красивее и может иметь встроенную панель поиска и разбивку на страницы. Дайте мне знать, если вам понадобятся дальнейшие инструкции, как это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...