【问题标题】:Flask displays the output html heading before the output is displayedFlask 在显示输出之前显示输出 html 标题
【发布时间】:2021-02-26 17:39:48
【问题描述】:

我在选择显示图表后创建了一个用户输入表单,我将图表结果的标题命名为“结果”,但结果标题甚至在用户选择之前显示

这是图片

我还没有选择任何东西。一旦我从下拉列表中选择,它就会显示类似这样的内容

显示完整的图表

我不希望在下拉选择之前显示标题结果 我该怎么办?

这是我的html代码sn-p

{% if result != None %}
      <div>
        <h2 style="color: #105583;"><a class="article-title">Results</a></h2>
        <img src="data:image/png;base64,{{ result }}"\>
      </div>
{% elif result == None %}  
      <div>
        <h2 style="color: #105583;">
<a class="article-title">Your results will be displayed here</a></h2>
      </div>
{% endif %}    

这是我在我的html文件中写的,如果你们都需要显示任何其他代码,我将相应地编辑帖子

这是路线

@app.route('/DailyStats', methods=['GET','POST'])
def DailyStats():
   if request.method=='POST':
        timelineSelect = request.form['selectedTimeline']
        dateSelect = request.form['selectedDate']

        if(timelineSelect=='Daily'):
            import datetime
            idx=get_date.index(dateSelect)
            df['d'] = pd.to_datetime(df['date_time'], format='(%Y,%m,%d,%H,%M,%S)')
            day1 = df['d'].dt.date[idx]
            df1 = df[df['d'].dt.date.eq(day1)]
            df1 = df1.melt(['date_time','d']) 
            df1 = df1[df1['value'].eq('Y')]
            d = df1.groupby('variable')['date_time'].apply(list).to_dict()
            d = {k: [x.time() for x in v] for k, v in d.items()}
            xpoints=[]
            ypoints=[]
            for x in d:
                for y in d[x]:
                    xpoints.append(y)
                    ypoints.append(x)
            x_dt = [datetime.datetime.combine(datetime.date.today(), t) for t in xpoints]
            fig, ax = plt.subplots()
            plt.plot([],[],)
            ax.scatter(x_dt,ypoints, marker='_')
            ax.set_title('Usage % of Hardware on '+ dateSelect)
            plt.yticks(size=5, fontsize=10)
            plt.xticks(rotation=85,fontsize=10)
            plt.xlabel('Time')
            plt.ylabel('Apps')
            plt.tick_params(axis="y",length=5, color="red")
            plt.grid(color='gray', linestyle='-', linewidth=0.5)
            plt.tight_layout()
            myFmt = mdates.DateFormatter("%H")
            ax.xaxis.set_major_formatter(myFmt)
            print(myFmt)
            print(ax.xaxis.set_major_formatter(myFmt))

            ## Rotate date labels automatically
            fig.autofmt_xdate()
            from io import BytesIO
            fig = BytesIO()
            plt.savefig(fig, format='png')
            fig.seek(0) 
            import base64
            figdata_png = base64.b64encode(fig.getvalue())
    return render_template('datasetDisplay.html', result=figdata_png.decode('utf8'))

【问题讨论】:

  • python 中的 `print(result)' 显示什么?看起来它不是 None,所以你的 Jinja 条件正在试图显示它。
  • 嗨,我按照这个答案中的步骤显示图表stackoverflow.com/questions/31492525/…,现在当我print(type(result)) 它显示&lt;class 'bytes'&gt;
  • 看,所以你的模板似乎永远不会得到 None。显示更多构成此页面的路由/控制器逻辑:)
  • 我在问题中添加了路线

标签: python html flask jinja2


【解决方案1】:

好的,所以我想当您第一次加载页面时,它会跳过所有逻辑(因为它只是“POST”)并直接到达render_template。它是如何获得figdata_png 用于放入变量的对我来说是个谜,但它似乎在那里放置了一些东西。因此,您的解决方案可能是拥有

if request.method == "POST":
  (your code)
  result = figdata_png.decode("utf-8")
elif request.method == "GET":
  result = None

return render_template(..., result=result)
  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 2010-09-29
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多