【问题标题】:Request html label text from flask从烧瓶请求html标签文本
【发布时间】:2018-03-03 19:22:32
【问题描述】:

我开发了一个在 html 中有标签的烧瓶应用程序。标签文本位于表单内,并通过用户输入的 javascript 进行更改。但是,如果提交了表单,我会调用烧瓶路线并想要获取/请求标签文本。请求适用于范围或下拉列表,但由于某种原因它不适用于标签。我错过了什么?

以下是有效的:

@app.route("/estimator/", methods=['GET', 'POST'])
def estimator():
    if request.method == 'POST':
        mmm_es.online = float(request.form['range_on'])

什么不起作用:

@app.route("/estimator/", methods=['GET', 'POST'])
def estimator():
    if request.method == 'POST':
        mean_sum = request.form['spend_per_month']

        mean_sum = request.form.get('spend_per_month')

我要么得到“none”作为 mean_sum 的值,要么得到一个错误的请求页面。

html 看起来像这样:

     <div class="col-sm-4">
         <label> Spending gesamt: </label>
         <input type="text" id="sumofspending" size=4 value={{ gesamt_sum }}> T€     </input>
         Spending pro Monat: <label style="font-weight:normal" id="spend_per_month" name="spend_per_month"> {{ mean_sum }} T€ </label>
     </div>
     <div class="col-sm-7">
        <label> Online: </label>
        <input type="range" name="range_on" min="0" max="10000" step="1" value="{{ online }}" id="range_online" onmousemove="update_from_rangetext(range_online)"/>
     </div>

完整的表格是:

<form  onsubmit="showloader()" action="/estimator/" method="POST" role="form" class="form-horizontal" style="display: inline;">
 <div class="form-group">
     <div class="row">
         <div class="col-sm-4">
             <label for="sel1">Geschäftsbereich:</label>
             <select class="form-control" id="pg" name="pg" onchange="this.form.submit()">
                 {% for pg_feature in pg_features %}
                    <option value="{{ pg_feature }}" {% if pg_feature==pg_select %} SELECTED {% endif %}>{{ pg_feature }}</option>
                 {% endfor %}
             </select>

         </div>
         <div class="col-sm-3">
            <label> GWE jetzt (%): </label> <br>
            <input type="text" name="GWE_jetzt" style="width:40px" value="{{  gwe_jetzt  }}">
         </div>
         <div class="col-xs-12" style="height:20px;"></div>
         <!--div class="col-xs-12" style="height:25px;"> <label> KPIs jetzt: </label> </div-->

         <div class="col-sm-4">
             <label> Anfangsmonat: </label>
             <select class="form-control" id="start_month" name="start_month" onchange="update_spends_per_month()">
                 <option value="Januar"> Januar </option>
                 <option value="Februar"> Februar </option>
                 <option value="März"> März </option>
                 <option value="April"> April </option>
                 <option value="Mai"> Mai </option>
                 <option value="Juni"> Juni </option>
                 <option value="Juli"> Juli </option>
                 <option value="August"> August </option>
                 <option value="September"> September </option>
                 <option value="Oktober"> Oktober </option>
                 <option value="November"> November </option>
                 <option value="Dezember"> Dezember </option>
             </select>
         </div>
         <div class="col-sm-4">
             <label> Endmonat: </label>
             <select class="form-control" id="end_month" name="end_month" onchange="update_spends_per_month()">
                 <option value="Januar"> Januar </option>
                 <option value="Februar"> Februar </option>
                 <option value="März"> März </option>
                 <option value="April"> April </option>
                 <option value="Mai"> Mai </option>
                 <option value="Juni"> Juni </option>
                 <option value="Juli"> Juli </option>
                 <option value="August"> August </option>
                 <option value="September"> September </option>
                 <option value="Oktober"> Oktober </option>
                 <option value="November"> November </option>
                 <option value="Dezember"> Dezember </option>
             </select>
         </div>
         <!--div class="col-sm-3">
            <label> GMB (%): </label>
            <!--input type="text" name="GMB_jetzt" style="width:40px" value="{{  gmb_jetzt  }}"-->
            <!--input type="text" name="GMB_jetzt" style="width:40px" value=0>
         </div>
          <div class="col-sm-3">
            <label> KB (%): </label>
            <input type="text" name="KB_jetzt" style="width:40px" value=0>
         </div-->
         <div class="col-xs-12" style="height:20px;"></div>
         <div class="col-sm-4">
             <label> Spending gesamt: </label>
             <input type="text" id="sumofspending" name="sumofspending" size=4 value={{ gesamt_sum }}> T€     </input>
             Spending pro Monat: <label style="font-weight:normal" id="spend_per_month" name="spend_per_month"> {{ mean_sum }} T€ </label>
         </div>
         <div class="col-sm-5">
             <button type="button" size=1 onclick="update_from_total()"> Gesamtspending prozentual auf genutzte Medien verteilen </button>
         </div>
         <!--div class="col-sm-4">
             <label> In Prozent: </label>
             <input type="checkbox" name="inprozent" id="inpercent" checked>
         </div-->
         <div class="col-xs-12" style="height:20px;"></div>
         <div class="col-sm-7">
              <input type="checkbox" name="gesamtprozent" value="gesamt" id="gesamtfest" {{ 'checked="checked"' if gesamt_checked else "" }} /> Gesamt fest
              <br> </br>
         </div>
         <div class="col-sm-4">
         </div>

         <div class="col-sm-7">
            <label> TV: </label>
            <input type="range" name="range_tv" min="0" max="10000" step="1" value="{{ tv }}" id="range_tv" onmousemove="update_from_rangetext(range_tv)"/> </input>
         </div>
         <div class="col-sm-4">
             <input type="text" id="text_tv" size=1  onkeyup="update_from_rangetext(text_tv)" value="{{ tv }}"> </input> <label> T€ - </label>
             <input type="text" id="percent_tv" size=1  onkeyup="update_from_rangetext(percent_tv)" value="33"> </input> <label> %  </label>
         </div>
         <!--div class="col-sm-2">
             <label id="percent_tv"> </label> %
         </div-->
         <div class="col-sm-7">
            <label> Online: </label>
            <input type="range" name="range_on" min="0" max="10000" step="1" value="{{ online }}" id="range_online" onmousemove="update_from_rangetext(range_online)"/>
         </div>
         <div class="col-sm-4">
            <input type="text" id="text_online" size=1  onkeyup="update_from_rangetext(text_online)" value="{{ online }}"> </input> <label> T€ - </label>
             <input type="text" id="percent_online" size=1  onkeyup="update_from_rangetext(percent_online)" value="33"> </input> <label> %  </label>
         </div>
         <div class="col-sm-7">
            <label> Publikumszeitschriften: </label>
            <input type="range" name="range_pz" min="0" max="10000" step="1" value="{{ pz }}"  id="range_pz" onmousemove="update_from_rangetext(range_pz)"/>
         </div>
         <div class="col-sm-4">
             <input type="text" id="text_pz" size=1  onkeyup="update_from_rangetext(text_pz)" value="{{ pz }}"> </input> <label> T€ - </label>
             <input type="text" id="percent_pz" size=1  onkeyup="update_from_rangetext(percent_pz)" value="33"> </input> <label> %  </label>
         </div>
         <div class="col-sm-7">
            <label> Radio: </label>
            <input type="range" name="range_radio" min="0" max="10000" step="1" value="{{ radio }}"   id="range_radio" onmousemove="update_from_rangetext(range_radio)"/>
         </div>
         <div class="col-sm-4">
             <input type="text" id="text_radio" size=1  onkeyup="update_from_rangetext(text_radio)" value="{{ radio }}"> </input> <label> T€ - </label>
             <input type="text" id="percent_radio" size=1  onkeyup="update_from_rangetext(percent_radio)" value="0"> </input> <label> %  </label>
         </div>
         <div class="col-sm-7">
            <label> Kino: </label>
            <input type="range" name="range_kino" min="0" max="10000" step="1" value="{{ kino }}" id="range_kino" onmousemove="update_from_rangetext(range_kino)"/>
         </div>
         <div class="col-sm-4">
             <input type="text" id="text_kino" size=1  onkeyup="update_from_rangetext(text_kino)"  value="{{ kino }}"> </input> <label> T€ - </label>
             <input type="text" id="percent_kino" size=1  onkeyup="update_from_rangetext(percent_kino)" value="0"> </input> <label> %  </label>
         </div>
         <!--div class="col-sm-7">
            <label> Mobile: </label>
            <input type="range" name="range_mobile" min="0" max="1000" step="1" value="{{ mobile }}" id="range_mobile" onmousemove="update_from_rangetext(range_mobile)"/>
         </div>
         <div class="col-sm-2">
            <input type="text" id="text_mobile" size=1> </input> <label> T€ </label>
         </div-->
         <div class="col-sm-7">
            <label> Zeitungen: </label>
            <input type="range" name="range_tz" min="0" max="10000" step="1" value="{{ tz }}" id="range_tz" onmousemove="update_from_rangetext(range_tz)"/>
         </div>
         <div class="col-sm-4">
            <input type="text" id="text_tz" size=1  onkeyup="update_from_rangetext(text_tz)"  value="{{ tz }}"> </input> <label> T€ - </label>
             <input type="text" id="percent_tz" size=1  onkeyup="update_from_rangetext(percent_tz)" value="0"> </input> <label> %  </label>
         </div>
         <div class="col-sm-7">
            <label> Plakat: </label>
            <input type="range" name="range_ooh" min="0" max="10000" step="1" value="{{ ooh }}" id="range_ooh" onmousemove="update_from_rangetext(range_ooh)"/>
         </div>
         <div class="col-sm-4">
             <input type="text" id="text_ooh" size=1  onkeyup="update_from_rangetext(text_ooh)"  value="{{ ooh }}"> </input> <label> T€ - </label>
             <input type="text" id="percent_ooh" size=1  onkeyup="update_from_rangetext(percent_ooh)" value="0"> </input> <label> %  </label>
         </div>
         <div class="col-sm-7">
            <label> Werbesendungen: </label>
            <input type="range" name="range_ws" min="0" max="10000" step="1" value="{{ ws }}" id="range_ws" onmousemove="update_from_rangetext(range_ws)"/>
         </div>
         <div class="col-sm-4">
             <input type="text" id="text_ws" size=1  onkeyup="update_from_rangetext(text_ws)"  value="{{ ws }}"> </input> <label> T€ - </label>
             <input type="text" id="percent_ws" size=1  onkeyup="update_from_rangetext(percent_ws)" value="0"> </input> <label> %  </label>
         </div>
     </div>
</div>
<div class="row">
<button type="submit" class="btn btn-info btn-lg">Schätze KPI's </button>
</div>
</form>

【问题讨论】:

  • 你能展示你完整的html
    吗?
  • 你的问题没有意义。标签用于向用户显示内容,而不是用于提交数据。如果您希望将数据发送到后端,请使用输入。
  • 我认为您的数据将在表单内['sumofspending']
  • 我只是认为我可以使用来自javascript的标签中的计算值。否则我需要在 python 中重新计算,这似乎不一致。
  • 他的意思是你必须查询你的输入而不是你的标签,在这种情况下,输入称为 sumofspending

标签: javascript python html flask


【解决方案1】:

答案在 cmets 中(感谢评论者):

丹尼尔·罗斯曼:

标签用于向用户显示内容,而不是用于 提交数据。如果要将数据发送到后端,请使用 输入。

因此,请求标签既不可能也不明智。 javascript中的计算必须在python中的服务器上再次完成。

【讨论】:

    【解决方案2】:

    您可以只添加一个名为“spend_per_month”的隐藏输入,并确保在用户更改标签时更新它。作为输入,它将与其他参数一起提交。

    <input type="hidden" name="spend_per_month" value="" id="minput" />
    

    您也可以在提交时进行,例​​如使用 jQuery 使用 val() 方法:

    $("form").on('submit',
                 function() {
                    $('#minput').val($("#spend_per_month_label").text());
                 });
    

    (您可能需要编辑标签元素的 id 以明确它是标签而不是隐藏的输入。)

    【讨论】:

    • 明确地说,如果我们想让 jQuery 代码工作,我们必须在 HTML 中包含 &lt;input type="hidden"...&gt;,是吗?
    猜你喜欢
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 2016-04-21
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多