2

ディレクトリ内のファイルを選択的に一覧表示するアプリを作成しています。Python がディレクトリを調べて情報を収集している間に、ユーザーが HTML ファイルを開いて「更新中...」というメッセージを受け取るようにしたいと思います。Python が終了すると、ページにファイルのリストが表示されます。

これはJinja2で可能ですか?調べてみると、PythonからHTMLファイルを生成して使っている人が多いようです。HTML内でPythonを呼び出すためにそれを使用することで、少し違うことをしたいと思います。それとも、私が取るべき別のアプローチがありますか?アドバイスをいただければ幸いです。

4

3 に答える 3

3

レンダリングされたテンプレートから Python を実行することはできませんが、Python と Javascript を組み合わせることで、必要なことを行うことができます。Web フレームワークの例として Flask を使用しますが、Flask に特に詳しくなくても、Flask が何をするかは明らかです。

アイデアは、2 つのルート/アドレスがあるということです。1 つは、「更新...」を実行する基本的なビューを提供します。もう 1 つのルートは、適切な HTML プレゼンテーションにレンダリングされたディレクトリ データで構成される HTML フラグメントを返します。だから、このようなもの:

パイソン:

def _walk_through_directories():
    """
    Walk through directories and gather the
    data you want and return it in some collection
    for example.
    """
    ...
    return directory_data


@app.route('/directories')
def directories():
    return render_template('directories.html')


@app.route('/directories/fragment')
def directories():
    directory_data = _walk_through_directories()
    return render_template('directories_fragment.html',
                           directory_data=directory_data)

ユーザーが /directories の基本ページに入ると、ディレクトリ データについてはまだ何も含まれていない基本テンプレートが表示されます。これを解決するには、ドキュメントの読み込みが完了した後に Javascript を実行し、Ajax で HTTP GET を実行してコンテンツをフェッチします。だから、このようなもの:

「directories.html」から呼び出される Javascript + jQuery:

$('#message-box').html('Updating...');

$.get('/directories/fragment', function(data) {
  $('#result-box').html(data);
  $('#message-box').html('All done!');
});

そのため、基本的なページを Python で提供し、クライアント側の Javascript を使用して「動的な」コンテンツを取得するという考え方です。私はこれをまとめただけなので、どこかで括弧が 1 つまたは 2 つ欠けている可能性があることに注意してください。適切なエラー処理とすべてのジャズを追加する必要があります。

于 2013-06-02T08:25:18.127 に答える
1

Jinja2自体は単なるテンプレート言語です。HTML の一部に Python アプリからのデータを再入力するには、AJAX 経由でデータを取得し、結果で DOM を変更できる jQuery などの JavaScript ライブラリを使用します。たとえば、最初のページのdiv要素に「更新中…」と表示されます。jQuery は、ディレクトリを読み取るアプリの URL に対して AJAX 呼び出しを行い、HTML 形式の文字列 (おそらく Jinja を介してレンダリングされる) を送信しますdiv

于 2013-05-31T12:02:10.550 に答える