Więc majstruję przy star wars swapi API i renderuję moje wyszukiwanie API do pliku html jako ciąg znaków, jednak nie mogę oddzielić tytułów w ciągu po linii:
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)
Oto plik 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 %}
Oto wynik: (na stronie index.html
)
„Nowa nadzieja Atak klonów Mroczne widmo Zemsta Sithów Powrót Jedi Imperium kontratakuje Przebudzenie mocy” (bez cytatów)
1 odpowiedź
W HTML musisz użyć <br>
zamiast \n
, aby umieścić tekst w nowej linii.
Powinieneś otrzymać tytuły jako listę, a następnie użyć "<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)
Lub prześlij listę z tytułami do szablonu
result = []
for film in film_json['results']:
result.append( film['title'] )
return render_template('index.html', results=result)
I użyj pętli {% for %}
w szablonie
<p>
{% for title in results %}
{{ title }}<br>
{% endfor %}
</p>
Ostatecznie powinieneś dodać '\n'
do każdego tytułu
for film in film_json['results']:
result += film['title'] + "\n"
return render_template('index.html', results=result)
I użyj zamiast tego <pre>
<p>
i będzie przestrzegać "\n"
(ale użyje czcionki o stałej szerokości, ponieważ została utworzona do wyświetlania kodu - jak ten kod w odpowiedzi)
<pre>{{ result }}</pre>
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.
results
? Jeśli pojedyncza linia, to nie możesz jej podzielić. Jeśli masz wiele linii, zamień'\n
na<br>
lub użyj<pre></pre>
zamiast<p></p>
{% for %}
w szablonie, aby wyświetlić każdy tytuł w oddzielnym<p>
lub dodać<br>
do każdego tytułu.