繁体   English   中英

如何简化 Flask 和 html 中的代码

[英]How can I simplify my code in Flask and html

我已经做 flask 和 python 大约 3 周了。

我正在尝试制作一个表格和表格,它采用两种货币和汇率并找到交换的双方。

即 CAD 到 US 和 US 到 CAD

这是我的 app.py 中的相关代码:

    @app.route("/form", methods=["GET", "POST"])
    def forms():
        global reverse_exchange_rate, exchange_rate
        form = CurrencyForm
        if request.method == 'GET':
            return render_template("form.html")

        if request.method == 'POST' and form.validate_on_submit():
            currency_1 = request.form['currency_1']
            currency_2 = request.form['currency_2']
            exchange_rate = float(request.form['exchange_rate'])
            reverse_exchange_rate = 1 / exchange_rate

            numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
            one = round(numbers.index(1) * exchange_rate, 3)
            two = round(numbers.index(2) * exchange_rate, 3)
            three = round(numbers.index(3) * exchange_rate, 3)
            four = round(numbers.index(4) * exchange_rate, 3)
            five = round(numbers.index(5) * exchange_rate, 3)
            six = round(numbers.index(6) * exchange_rate, 3)
            seven = round(numbers.index(7) * exchange_rate, 3)
            eight = round(numbers.index(8) * exchange_rate, 3)
            nine = round(numbers.index(9) * exchange_rate, 3)
            ten = round(numbers.index(10) * exchange_rate, 3)
            eleven = round(numbers.index(11) * exchange_rate, 3)
            twelve = round(numbers.index(12) * exchange_rate, 3)
            thirteen = round(numbers.index(13) * exchange_rate, 3)
            fourteen = round(numbers.index(14) * exchange_rate, 3)
            fifteen = round(numbers.index(15) * exchange_rate, 3)
            sixteen = round(numbers.index(16) * exchange_rate, 3)

            reverse_one = round(numbers.index(1) * reverse_exchange_rate, 3)
            reverse_two = round(numbers.index(2) * reverse_exchange_rate, 3)
            reverse_three = round(numbers.index(3) * reverse_exchange_rate, 3)
            reverse_four = round(numbers.index(4) * reverse_exchange_rate, 3)
            reverse_five = round(numbers.index(5) * reverse_exchange_rate, 3)
            reverse_six = round(numbers.index(6) * reverse_exchange_rate, 3)
            reverse_seven = round(numbers.index(7) * reverse_exchange_rate, 3)
            reverse_eight = round(numbers.index(8) * reverse_exchange_rate, 3)
            reverse_nine = round(numbers.index(9) * reverse_exchange_rate, 3)
            reverse_ten = round(numbers.index(10) * reverse_exchange_rate, 3)
            reverse_eleven = round(numbers.index(11) * reverse_exchange_rate, 3)
            reverse_twelve = round(numbers.index(12) * reverse_exchange_rate, 3)
            reverse_thirteen = round(numbers.index(13) * reverse_exchange_rate, 3)
            reverse_fourteen = round(numbers.index(14) * reverse_exchange_rate, 3)
            reverse_fifteen = round(numbers.index(15) * reverse_exchange_rate, 3)
            reverse_sixteen = round(numbers.index(16) * reverse_exchange_rate, 3)
            return render_template("table.html", form=form, currency_1=currency_1,currency_2=currency_2, exchange_rate=exchange_rate, numbers=numbers, one=one, two=two,three=three,four=four,five=five,six=six,seven=seven,eight=eight,nine=nine,ten=ten,eleven=eleven,twelve=twelve,thirteen=thirteen,fourteen=fourteen,fifteen=fifteen,sixteen=sixteen,reverse_exchange_rate=reverse_exchange_rate,reverse_one=reverse_one,reverse_two=reverse_two,reverse_three=reverse_three,reverse_four=reverse_four,reverse_five=reverse_five,reverse_six=reverse_six,reverse_seven=reverse_seven,reverse_eight=reverse_eight, reverse_nine=reverse_nine, reverse_ten=reverse_ten,                        reverse_eleven=reverse_eleven,reverse_twelve=reverse_twelve,reverse_thirteen=reverse_thirteen,reverse_fourteen=reverse_fourteen,reverse_fifteen=reverse_fifteen, reverse_sixteen=reverse_sixteen)
        else:
            message = "There was an error. Please try again."
            return message

这是表格。html:

{% extends "layouts/main.html" %}

    {% block content %}

        <h1 style="text-align:center">Currency Exchange</h1>

                <div style="margin-right:250px">
                    <div style="margin-left:250px">
                        <table style="border-collapse: collapse;", class="u-full-width">
                            <thead>
                                <tr>
                                    <th>{{ currency_1 }}</th>
                                    <th>{{ currency_2 }}</th>
                                    <th>{{ currency_2 }}</th>
                                    <th>{{ currency_1 }}</th>
                                </tr>
                            </thead>
                            <tbody>
                                <tr>
                                    <td> 1 </td>
                                    <td class="border-right"> {{ one }} </td>
                                    <td> 1 </td>
                                    <td> {{ reverse_one }} </td>
                                </tr>
                                <tr>
                                    <td> 2 </td>
                                    <td class="border-right"> {{two }} </td>
                                    <td> 2 </td>
                                    <td> {{ reverse_two }} </td>
                                </tr>
                                <tr>
                                    <td> 3 </td>
                                    <td class="border-right"> {{ three }} </td>
                                    <td> 3 </td>
                                    <td> {{ reverse_three }} </td>
                                </tr>
                                <tr>
                                    <td> 4 </td>
                                    <td class="border-right"> {{ four }} </td>
                                    <td> 4 </td>
                                    <td> {{ reverse_four }} </td>
                                </tr>
                                <tr>
                                    <td> 5 </td>
                                    <td class="border-right"> {{ five }} </td>
                                    <td> 5 </td>
                                    <td> {{ reverse_five }} </td>
                                </tr>
                                <tr>
                                    <td> 6 </td>
                                    <td class="border-right"> {{ six }} </td>
                                    <td> 6 </td>
                                    <td> {{ reverse_six }} </td>
                                </tr>
                                <tr>
                                    <td> 7 </td>
                                    <td class="border-right"> {{ seven }} </td>
                                    <td> 7 </td>
                                    <td> {{ reverse_seven }} </td>
                                </tr>
                                <tr>
                                    <td> 8 </td>
                                    <td class="border-right"> {{ eight }} </td>
                                    <td> 8</td>
                                    <td> {{reverse_eight }} </td>
                                </tr>
                                <tr>
                                    <td> 9 </td>
                                    <td class="border-right"> {{ nine }} </td>
                                    <td> 9 </td>
                                    <td> {{ reverse_nine }} </td>
                                </tr>
                                <tr>
                                    <td> 10 </td>
                                    <td class="border-right"> {{ ten }} </td>
                                    <td> 10 </td>
                                    <td> {{ reverse_ten }} </td>
                                </tr>
                                <tr>
                                    <td> 11 </td>
                                    <td class="border-right"> {{ eleven }} </td>
                                    <td> 11 </td>
                                    <td> {{ reverse_eleven }} </td>
                                </tr>
                                <tr>
                                    <td> 12 </td>
                                    <td class="border-right"> {{ twelve }} </td>
                                    <td> 12 </td>
                                    <td> {{ reverse_twelve }} </td>
                                </tr>
                                <tr>
                                    <td> 13 </td>
                                    <td class="border-right"> {{ thirteen }} </td>
                                    <td> 13 </td>
                                    <td> {{ reverse_thirteen }} </td>
                                </tr>
                                <tr>
                                    <td> 14 </td>
                                    <td class="border-right"> {{ fourteen }} </td>
                                    <td> 14 </td>
                                    <td> {{ reverse_fourteen }} </td>
                                </tr>
                                <tr>
                                    <td> 15 </td>
                                    <td class="border-right"> {{ fifteen }} </td>
                                    <td> 15 </td>
                                    <td> {{ reverse_fifteen }} </td>
                                </tr>
                                <tr>
                                    <td> 16 </td>
                                    <td class="border-right"> {{ sixteen }} </td>
                                    <td> 16 </td>
                                    <td> {{ reverse_sixteen }} </td>
                                </tr>
                            </tbody>
                        </table>
                    </div>
                </div>
            <div style="text-align:center">
                <a class = "button button-primary" href="/form">Change Currencies</a>
            </div>
        {% endblock %}

有什么办法可以缩短所有这些吗?

我试图在 app.py 中创建一个范围(0,50)的 for 循环,尽管它会遍历整个循环,然后将最后一个数字发送到 table.html。 有没有办法将每个单独的数字发送到 table.html?

有不同的解决方案吗?

请记住,我已经编写了 3 周的代码,并且可能有一个非常简单的解决方案我还没有想出。 任何帮助表示赞赏。

正如@VPfB 所说,可能值得研究数据结构。 这是您可以如何将一些与现有代码一起使用的方法。

首先,我将为示例定义一个 static 汇率:

exchange_rate = 1.4

然后构建一个名为headers字典,其中包含以下值:

headers = {
    'currency_1': 'USD',
    'currency_2': 'CAD',
    'exchange_rate': exchange_rate,
    'reverse_exchange_rate': 1 / exchange_rate,
}

我刚刚在此处手动分配了字符串'USD''CAD'以进行演示,但显然您会从表单中获取这些字符串。

然后对于数字,您可以执行以下操作:

data = [dict(num=n,
             normal =  round(n * headers['exchange_rate'], 3),
             reverse = round(n * headers['reverse_exchange_rate'], 3)
      ) for n in range(0, 16)]

这是使用列表理解。 上面的内容基本相同:

data = [] # an empty list
for n in range(0, 16):
    d = {} # an empty dict
    d['num'] = n
    d['normal'] = round(n * headers['exchange_rate'], 3)
    d['reverse'] = round(n * headers['reverse_exchange_rate'], 3)
    data.append(d) # add this dict to the list.

也可以写成:

data = [] # an empty list
for n in range(0, 16):
    d = dict(num  = n,
             normal = round(n * headers['exchange_rate'], 3),
             reverse = round(n * headers['reverse_exchange_rate'], 3))
    data.append(d) # add this dict to the list.

data现在是一个字典列表

然后,您可以将所有这些传递给您的模板:

return render_template('index.html', headers=headers, data=data)

然后在您的模板中,手动构建 header 行,并在data列表中进行 Jinja for 循环:

<table>
  <thead>
    <tr>  
      <th>{{ headers['currency_1'] }}</th>
      <th>{{ headers['currency_2'] }}</th>
      <th>{{ headers['currency_2'] }}</th>
      <th>{{ headers['currency_1'] }}</th>
    </tr>
  </thead>

  <tbody>
    {% for row in data %}
    <tr>
      <td> {{ row['num'] }} </td>
      <td class="border-right"> {{ row['normal'] }} </td>
      <td> {{ row['num'] }} </td>
      <td> {{ row['reverse'] }} </td>
    </tr>
    {% endfor %}  
  </tbody>
</table>

这会在前端呈现,例如:

样品表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM