Flask,SAP UI5和MVC

时间:2018-12-01 23:16:22

标签: python model-view-controller flask sapui5

我想构建一个Python-Flask应用程序并使用SAPUI5。 我试图在Flask中构建这个小型应用程序:https://sapui5.hana.ondemand.com/1.60.1/#/sample/sap.m.tutorial.walkthrough.05/preview

一切正常,我的代码如下:

app.py

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def hello_world():
    return render_template("index.html")


if __name__ == '__main__':
    app.run()

index.html

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta charset="utf-8">
    <title>SAPUI5 Walkthrough</title>
    <script
        id="sap-ui-bootstrap"
        src="/static/sap-ui-core.js"
        data-sap-ui-theme="sap_belize"
        data-sap-ui-libs="sap.m"
        data-sap-ui-compatVersion="edge"
        data-sap-ui-preload="async"
        data-sap-ui-resourceroots='{
            "static": "./"
        }'
        >
    </script>
    <script>
        sap.ui.getCore().attachInit(function () {
            sap.ui.xmlview({
                viewName: "mvc.view.App"
            }).placeAt("content");
        });
    </script>
</head>
<body class="sapUiBody" id="content">
</body>
</html>

App.view.xml

<mvc:View
    controllerName="mvc.controller.App"
    xmlns="sap.m"
    xmlns:mvc="sap.ui.core.mvc">
    <Button
        text="Say Hello"
        press="onShowHello"/>
</mvc:View>

App.controller.js

sap.ui.define([
    "sap/ui/core/mvc/Controller"
], function (Controller) {
    "use strict";

    return Controller.extend("mvc.App", {

        onShowHello : function () {
            // show a native JavaScript alert
            /* eslint-disable no-alert */
            alert("Hello World");
            /* eslint-enable no-alert */
        }
    });

});

我的问题是:如何将参数从我的app.py传递到App.view.xml和App.controller.js?

最后,我要实现以下目标:

app.py

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def hello_world():
    return render_template("index.html", text="Hello World", buttonlabel="Say Hello")


if __name__ == '__main__':
    app.run()

App.view.xml

<mvc:View
    controllerName="mvc.controller.App"
    xmlns="sap.m"
    xmlns:mvc="sap.ui.core.mvc">
    <Button
        text="{{ buttonlabel }}"
        press="onShowHello"/>
</mvc:View>

App.controller.js

sap.ui.define([
    "sap/ui/core/mvc/Controller"
], function (Controller) {
    "use strict";

    return Controller.extend("mvc.App", {

        onShowHello : function () {
            // show a native JavaScript alert
            /* eslint-disable no-alert */
            alert({{ text }});
            /* eslint-enable no-alert */
        }
    });

});

1 个答案:

答案 0 :(得分:1)

简短答案:UI5不是模板引擎

长答案:UI5应用由静态文件(.js,.html,.css)组成。因此,您的python服务器必须将它们原样返回给客户端。

您的UI5应用和python服务器之间的任何通信都需要通过REST调用完成。