如何将一组格式化的句子传递给Flask模板?

时间:2018-08-08 18:43:20

标签: python templates flask

我不知道如何将html格式的句子数组传递给flask模板。

@app.route('/', methods=['POST'])
def my_form_post():
    question = request.form['question'].lower()
    text = request.form['text'].lower()

    open = '<div class="tooltip">'
    after_sentence = '<span class="tooltiptext">'
    close = '</span> </div>'

    out = text + " <mark> " +  question + " </mark>"

    return render_template('layout.html', text_out = tooltip, text_out2 = tooltip2)

在模板中我有

  <div id="_out">

  {{text_out|safe}}

  {{text_out2|safe}}

 </div>

这有效。但是我想格式化文本中的每个句子(并且我不能对其进行硬编码)(例如,为工具提示提供每个句子自己的消息)并将其作为数组传递给同一div中的相同模板。我该怎么办?

像这样的东西给模板错误

open = '<div class="tooltip">'
after_sentence = '<span class="tooltiptext">'
close = '</span> </div>'

tooltip = "first"
tooltip2 = "second"
first = open + "hello" + after_sentence + tooltip + close
second = open + "hello2" + after_sentence + tooltip2 + close
list = [first, second]
return render_template('layout.html', list)

  <div id="_out">

  <!-- {{text_out|safe}}

  {{text_out2|safe}} -->

  {% for item in {{list}} %}
  item 
  {% endfor %}

 </div>

将列表转换为字典也无济于事

list = {“第一”:第一,“第二”:第二} 返回render_template('layout.html',列表)

给我

TypeError: render_template() takes 1 positional argument but 2 were given

谢谢

已解决: 你需要通过字典然后做

render_template("layout.html", dic=dic)

不是

render_template("layout.html", dic)

1 个答案:

答案 0 :(得分:0)

尝试执行以下操作:

{% for item in list %}   
    {{ item|safe }} 
{% endfor %}

要在此处分解某些语法,{% %}通常指的是语句(例如{% if something %}{% while True %})。当您要打印某些内容(例如{{ }}{{ item }})时,使用{{ text_out }}。当您向打印语句中添加|时,它指示jinja2将过滤器应用于紧接对象之前的对象。例如,|safe表示之前提到的对象是“安全”的html,不需要进行转义。