用flask render_template()傳遞參數(shù)

我需要顯示一些選擇選項。一旦選擇了類別,我想用另一個選擇顯示子類別。

我的flask代碼

def return_panim():
    panim = ["", "????? ????? ????", "????? ????", "????? ?????? ????", "????? ????? ????? ??????", "????? ???? ????'??? ????????", "????? ???? ????'??? ????? ????"]
    data = """
        <label>???????</label>
        <select id="subCategory" onchange="loadDoc()">"""
    for pan in panim:
        data = data + '<option value=' + '"' + pan + '"' + ">" + '"' + pan + '"' + '</option>'
    data = data + '</select>'
    return data


def return_categories():
    category_list = ["", "????? ????", "????? ???? ????", "????? ???? ?????????", "????? ????", "??????", "??????", "?????", "????? ?????"]
    data = """
        <label>?? ???????</label>
        <select id="category" onchange="loadDoc()">"""
    for category in category_list:
        data = data + '<option value=' + '"' + category + '"' + '>' + category + '</option>'
    data = data + "</select>"    
    return data

@app.route("/appoint", methods=["GET", "POST"])
def apple(name=None):
    if request.method == "POST":
        r = request.get_data().decode("utf-8")
        print(r)
        if r ==  "????? ????":
            print(return_panim())
            return render_template("appoint.html",  data_category=return_categories(), data_subcategory=return_panim())
    return render_template("appoint.html",  data_category=return_categories())

我的客戶端

<html>
<head>
</head>
<body>
{{ data_category | safe }}
{{ data_subcategory | safe }}
<script>
  function loadDoc() {
    let encoder = new TextEncoder();
  const xhttp = new XMLHttpRequest();
  var sel = document.getElementById("category");
  var text = sel.value;
  xhttp.open("POST", "https://www.annastudio.beauty/appoint", true);
  xhttp.send(encoder.encode(text));
}
</script>
</body>
</html>

當我試圖無條件返回時

@app.route("/appoint", methods=["GET", "POST"])
def apple(name=None):
    return render_template("appoint.html",  data_category=return_categories(), data_subcategory=return_panim())

它將渲染兩個選擇。

? 最佳回答:

我認為您不必為此任務(wù)使用Ajax。

以下示例使用兩個字段集。根據(jù)在第一個select元素中所做的選擇,使用JavaScript啟用或禁用第二個字段集。禁用的字段集使用CSS隱藏。

如果不想使用字段集,可以以相同的方式禁用和啟用各個輸入字段。

from enum import Enum, unique
from flask import (
    Flask, 
    redirect, 
    render_template, 
    request
)

@unique 
class Categories(str, Enum):
    OPTION1 = "????? ????"
    OPTION2 = "????? ???? ????"
    OPTION3 = "????? ???? ?????????"
    OPTION4 = "????? ????"
    OPTION5 = "??????"
    OPTION6 = "??????"
    OPTION7 = "?????"
    OPTION8 = "????? ?????"

@unique 
class SubCategories(str, Enum):
    OPTION1 = "????? ????? ????"
    OPTION2 = "????? ????"
    OPTION3 = "????? ?????? ????"
    OPTION4 = "????? ????? ????? ??????"
    OPTION5 = "????? ???? ????'??? ????????"
    OPTION6 = "????? ???? ????'??? ????? ????"

app = Flask(__name__)

@app.route('/appoint', methods=['GET', 'POST'])
def appoint():
    if request.method == 'POST':
        category = request.form.get('category', Categories.OPTION1, type=lambda x: Categories[x])
        subcategory = request.form.get('subcategory', type=lambda x: SubCategories[x])
        print(category.value)
        print(subcategory and subcategory.value)
        return redirect(request.url)
    return render_template(
        'appoint.html', 
        categories=Categories, 
        subcategories=SubCategories
    )
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Appoint</title>
    <style>
        fieldset[disabled] {
            display: none;
        }
    </style>
</head>
<body>
    
    <form method="post">
        <fieldset name="basics">
            <label for="category">Category</label>
            <select name="category" id="category">
                {% for cat in categories -%}
                <option value="{{ cat.name }}">{{ cat.value }}</option>
                {% endfor -%}
            </select>
        </fieldset>
        <fieldset name="extended">
            <label for="subcategory">Subcategory</label>
            <select name="subcategory" id="subcategory">
                {% for cat in subcategories -%}
                <option value="{{ cat.name }}">{{ cat.value }}</option>
                {% endfor -%}
            </select>
        </fieldset>
        <button type="submit">Submit</button>
    </form>

    <script>
        (function() {

            const triggerVal = {{ categories.OPTION1.name | tojson }};
            const selectElem = document.getElementById('category');
            const fieldsetElem = document.querySelector('fieldset[name="extended"]');
            selectElem.addEventListener('change', function() {
                fieldsetElem.disabled = this.value !== triggerVal;
            });

        })();
    </script>
</body>
</html>
主站蜘蛛池模板: 精品视频一区二区观看| 亚洲日韩国产一区二区三区在线 | 亚洲日韩一区二区一无码| 欲色影视天天一区二区三区色香欲 | 日韩免费观看一区| 国产中文字幕一区| tom影院亚洲国产一区二区| 痴汉中文字幕视频一区| 久久精品国内一区二区三区| 亚洲AV无码一区东京热| 中日av乱码一区二区三区乱码| 日本一区二区三区四区视频| 波多野结衣一区二区免费视频| 亚洲熟妇AV一区二区三区浪潮| 国产成人久久精品一区二区三区| 国产一区二区三区免费在线观看| 亚洲a∨无码一区二区| 在线欧美精品一区二区三区| 日韩精品无码一区二区中文字幕 | 午夜DV内射一区区| 日本一区二三区好的精华液| 学生妹亚洲一区二区| 日产精品久久久一区二区| 香蕉久久一区二区不卡无毒影院 | 国产福利电影一区二区三区,免费久久久久久久精 | 精品一区二区无码AV| 精品伦精品一区二区三区视频| 一区视频在线播放| 一区二区三区影院| 国精品无码一区二区三区在线蜜臀| 精品一区二区三区免费视频| 成人无码AV一区二区| 久久亚洲综合色一区二区三区| 中文字幕无码一区二区免费| 无码精品视频一区二区三区| 亚洲午夜在线一区| 国产精品盗摄一区二区在线| 亚洲av区一区二区三| 国产精品丝袜一区二区三区| 亚洲无圣光一区二区| 日韩免费无码一区二区视频|