2016-05-20 19 views
1

私は、Jinja2とJavascriptをフロントエンドで使用し、Pythonをバックエンドで使用するCMSのようなシステムをハッキングしています。Jinja2:クリック時のコール機能

私は、バックエンドでデータベース上の作業を行ういくつかのPython関数を実装しました。

私はHTMLページからその機能を起動したいので、私はJinja2を使用しました。

スニペット{% %}{{ }}は、HTMLが読み込まれると、常に解析されて処理されるという問題があります。

ボタンまたはリンクをクリックすると、その機能を実行します。

どうすればいいですか?

+1

それほど些細なことではありません...あなたは、フロントエンドからジンジャーを通してPythonの関数を実行することはできません。あなたはPythonでエンドポイントを作成する必要があります: 'mydomain.com/api/function-i-need-to-call'そしてクライアント側からjsがそのエンドポイントにちょうどヒットしました –

+0

AJAXの何が問題なのですか? –

答えて

2

Jinja2はテンプレートエンジンです。あなたはその使用について間違っています。

FlaskまたはBottleのような軽量のWebフレームワークで小さなアプリケーションを作成し、いくつかのajaxルートを予想される方法にルーティングできます。ここで

フラスコを使用した例です:ドキュメントで説明したように

backend.py

import os 
from json import dumps 
from flask import Flask, render_template 

app = Flask(__name__) 

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

@app.route("/cmd") 
def cmd(): 
    osname = os.uname()[3] 
    print(osname) 
    return dumps({'name': osname}) 

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

、テンプレートは、プロジェクトフォルダ内のtemplateと呼ばれるフォルダにある必要があります。それだけでpython backend.pyを実行して実行するには

cmd.html

<html> 
    <head> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.3/jquery.min.js"></script> 
     <script type="text/javascript"> 
      function cmd(){ 
       $.ajax({ 
        type: "GET", 
        url: "http://0.0.0.0:5000/cmd", 
        success: function (data) { 
         $("#result").html("dfsdfds") 
        }, 
       });     
      } 
     </script> 
    </head> 
    <body> 
     <a href="#" onclick="return cmd();">Item</a> 
     <div id="result"></div> 
    </body> 
</html> 

。ブラウザを開き、http://127.0.0.1:500に移動

このアプリケーションはバックエンドでコマンドを実行し、結果を返します。