为什么不表达render_template?

时间:2019-02-18 11:37:08

标签: python html post flask

我有一个带有HTML页面的烧瓶应用程序。问题在于,在我有{{ Appointments }}的HTML中,它总是显示空列表的第二个render_template的值。

@app.route("/PatientDashboard.html", methods=["GET", "POST"])
def PatientDashboard():

    if request.method == "POST":
        Date = request.form.get("Date")
        print(Date)
        return render_template("PatientDashboard.html", Appointments=["This should show up."])

    else:
        return render_template("PatientDashboard.html", Appointments=[]) 

问题在于前一个render_template从未被表达。为什么会这样,我将如何解决?

非常感谢您。

编辑1:

下面是相关的HTML。

<script>
    var jsDate = $('#calendar').datepicker({
        inline: true,
        firstDay: 1,
        showOtherMonths: false,
        dayNamesMin: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
        onSelect: function(dateText, inst) {
            document.getElementById("Date").innerHTML = dateText;
            $.ajax({
                type: 'POST',
                url: "{{ url_for('PatientDashboard') }}",
                data: {Date: dateText},
                dataType: "text",
            });
        }
    });
</script>

此外,我在分隔符中有{{ Appointments }}

1 个答案:

答案 0 :(得分:1)

您正在将Appointments中渲染模板的内容放入POST请求的响应中。如果要在页面上使用Appointments数据,则需要通过回调扩展POST请求,该回调将使用该数据满足您的任何需求。

那么基本上会发生什么:

  1. 页面加载(获取请求),模板以空白的Appointments列表呈现
  2. 页面触发POST ajax请求,该请求返回设置了Appointments的渲染模板
  3. 您不处理POST响应,因此该数据将被丢弃。

典型方法是仅从POST响应中获取相关数据(例如JSON格式),而不是整个页面:

from flask import Response

if request.method == "POST":
    Date = request.form.get("Date")
    print(Date)
    Appointments=["This should show up."]
    return Response(json.dumps(Appointments), mimetype='application/json')
else:
    return render_template("PatientDashboard.html", Appointments=[])