使用Flask中的render\u模板,如何将字符串拆分为多行?

2024-06-25 23:16:24 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我在玩《星球大战》的swapi,把API搜索结果作为一个字符串呈现在一个html文件上,但是我似乎无法按行分隔字符串中的标题:

from flask import Flask, render_template, request, redirect
import requests
import json
import swapi

app = Flask(__name__)


@app.route('/', methods=['GET', 'POST'])
def index():
    url = "https://swapi.co/api/"
    star_wars_api = requests.get(url)

    result = ''
    if request.method == 'POST':
        films = requests.get(star_wars_api.json()['films'])
        if films.status_code == 200:
            if request.form['search'] == "films":
                film_json = films.json()

                for film in film_json['results']:
                    result += str(film['title'])

                return render_template('index.html', results=result)
    else:
        return render_template('index.html')


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

以下是HTML文件:

{% extends 'base.html'%}

{% block head %} {% endblock %}

{% block body %}

<form action="/" method="POST">
    <label for="search">Search:</label>
    <input class="form-control" type="text" name="search" id="search" placeholder="Search" aria-label="Search">
    <br>
    <input type="submit" value="Post">
</form>

<p> {{ results }}</p>

{% endblock %}

以下是输出:(在index.html页上)

“克隆人的新希望帝国反击原力觉醒时幽灵的威胁对绝地武士的报复”(不带引号)


Tags: importformjsonappsearchindexifrequest
1条回答
网友
1楼 · 发布于 2024-06-25 23:16:24

在HTML中,您必须使用<br>而不是\n来将文本放入新行。你知道吗

您应该以列表的形式获取标题,然后使用"<br>".join(titles)

titles = []

for film in film_json['results']:
    titles.append( film['title'] )

result = "<br>".join(titles)

return render_template('index.html', results=result)

或者你应该发送标题列表到模板

result = []

for film in film_json['results']:
    result.append( film['title'] )

return render_template('index.html', results=result)

并在模板中使用{% for %}循环

<p>
{% for title in results %} 
{{ title }}<br>
{% endfor %}
</p>

最后你应该给每个标题加上'\n'

for film in film_json['results']:
    result += film['title'] + "\n"

return render_template('index.html', results=result)

使用<pre>而不是<p>,它将尊重"\n"(但它将使用单空格字体,因为它是为了显示代码而创建的-就像答案中的代码一样)

<pre>{{ result }}</pre>

相关问题 更多 >