Рефакторинг рендеринга Flask формы с несколькими одинаковыми входами - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть HTML файл, содержащий формы с жанрами и стилями. Это хорошо, но я бы хотел, чтобы мне было легче менять жанры и стили на лету, а не жестко кодировать их. Я также хотел бы начать разбивать это, потому что я хочу начать добавлять цвет и другие стилистические вещи c.

<html><body>
<h2> Spin yo records </h2>
    <form action="/query">
        <input type='submit' value="I'm Feeling Lucky">
    </form>
    <form action="/query">
        <input type='submit' name='genre' value="Electronic">
        <input type='submit' name='genre' value="Rock">
        <input type='submit' name='genre' value="Jazz">
        <input type='submit' name='genre' value="Pop">
        <input type='submit' name='genre' value="Classical">
    </form>
    <form action="/query">
        <input type='submit' name='style' value="Ambient">
        <input type='submit' name='style' value="Drone">
        <input type='submit' name='style' value="Shoegaze">
        <input type='submit' name='style' value="Pop Rock">
        <input type='submit' name='style' value="Post Rock">
        <input type='submit' name='style' value="Hard Rock">
        <input type='submit' name='style' value="Prog Rock">
        <input type='submit' name='style' value="Black Metal">
        <input type='submit' name='style' value="Folk, World, & Country">
        <input type='submit' name='style' value="Modern">
    </form>
</body></html>

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

header_html = """
<h2> Spin yo records </h2>"""

all_form_html = """
        <form action="/query">
            <input type='submit' value="I'm Feeling Lucky">
        </form>
        """

genres_form_html = """
        <form action="/query">
            <input type='submit' name='genre' value="Electronic">
            <input type='submit' name='genre' value="Rock">
            <input type='submit' name='genre' value="Jazz">
            <input type='submit' name='genre' value="Pop">
            <input type='submit' name='genre' value="Classical">
        </form>
        """

styles_form_html = """
        <form action="/query">
            <input type='submit' name='style' value="Ambient">
            <input type='submit' name='style' value="Drone">
            <input type='submit' name='style' value="Shoegaze">
            <input type='submit' name='style' value="Pop Rock">
            <input type='submit' name='style' value="Post Rock">
            <input type='submit' name='style' value="Hard Rock">
            <input type='submit' name='style' value="Prog Rock">
            <input type='submit' name='style' value="Black Metal">
            <input type='submit' name='style' value="Folk, World, & Country">
            <input type='submit' name='style' value="Modern">
        </form>
        """

homepage = """
<html><body>""" \
+ header_html \
+ all_form_html \
+ genres_form_html \
+ styles_form_html + \
"""
</body></html>

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

Вы можете передать жанры и стили в виде списков в шаблон для Flask визуализации. Шаблон перебирает каждый список и отображает входные данные со значением для каждого элемента.

In templates/spin_records.html:

<form action="{{ url_for('spin_records') }}">
    Genres:
    {% for genre in genres%}
    <input type='submit' name='genre' value="{{ genre }}"><br/>
    {% endfor %}
    Styles:
    {% for style in styles%}
    <input type='submit' name='style' value="{{ style }}"><br/>
    {% endfor %}
</form>

В вашем коде Python, например:

from flask import Flask, render_template

app = Flask(__name__)

genres = ["Electronic", "Rock", "Jazz", "Pop", "Classical"]
styles = ["Ambient", "Drone", "Shoegaze", "Pop Rock", 
          "Post Rock", "Hard Rock", "Prog Rock", "Black Metal", 
          "Folk, World, & Country", "Modern"]

@app.route('/spin_records')
def spin_records():
    return render_template('spin_records.html', genres=genres, styles=styles)
0 голосов
/ 13 апреля 2020

Вы можете попробовать это:

header_html = """
<h2> Spin yo records </h2>"""

all_form_html = """
        <form action="/query">
            <input type='submit' value="I'm Feeling Lucky">
        </form>
        """
genres = ["Electronic","Rock","Jazz","Pop","Classical"]
genres_form_html ="<form action='/query'>"
for gen in genres:
    genres_form_html + ="<input type='submit' name='genre' value='"+gen+"'>"

genres_form_html ="</form>"
styles= ["Ambient","Drone","Shoegaze","Pop Rock","Post Rock","Hard Rock","Prog Rock","Black Metal","Folk, World, & Country","Modern"]
styles_form_html ="<form action='/query'>"
for stl in styles:
    styles_form_html + ="<input type='submit' name='style' value='"+stl+"'>"

styles_form_html ="</form>"

homepage = """
<html><body>""" \
+ header_html \
+ all_form_html \
+ genres_form_html \
+ styles_form_html + \
"""
</body></html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...