3

これは非常に基本的な問題のようですが、私には理解できません。URLのリストをHTMLページに渡し、それぞれをhrefタグで印刷しようとしています。Flaskを使用してテストサーバーを実行しており、変数が正しく渡されていることを確認できます(リスト全体またはそこから要素を印刷できます)。

私のアプリルート:

import doaudit # separate Py script that gets these urls

@app.route('/audit', methods = ['GET'])
def audit():
    return render_template('audit.html', listOfUrls = doaudit.listOfUrls)

私のテンプレート:

<html>
    <head>
        <title>Data Audit</title>   
</head>
<body>

        {% for url in listOfUrls %}        
        <script language="JavaScript">
            document.write( "<a href=\"" + url + "\">linktext</a>" );
        </script>
        {% endfor %}

    </body>
</html>

私はバリエーションを試しました:

document.write( "<a href=\"" + '{{ listOfUrls[i] }}' + "\">linktext</a>" );

すべてのiを繰り返し処理しますが、それも機能しません。

リストの長さはさまざまである可​​能性があるため、反復的な解決策が必要です。前もって感謝します。

4

1 に答える 1

5

これはあなたが望むものです:

{% for url in listOfUrls %}        
    <script language="JavaScript">
        document.write( "<a href=\"" + {{ url|tojson|safe }} + "\">linktext</a>" );
    </script>
{% endfor %}

この部分は、これが実際にはで呼び出した変数であることを{{ url }}Jinja2(テンプレートエンジン)に伝えます。それがないと、そのまま印刷されます。ブラウザでソースを表示すると表示されます。これは、JS変数として解釈されることを意味します。これは、空の文字列に相当し、次に表示されます。urlfor url in blablaundefined

編集:tojson|safe JSコードを壊さないように、呼び出しを追加しました。あなたはこのようにそれを行うことができます:<a href=\"{{ url }}\">linktext</a>。しかし、それなら"あなたのhtml/jsコードを壊してしまいます。

編集2:フィルターが行うことtojsonは、JSコード内に配置するのに適したものにすることです。safeフィルタは、レンダリングエンジンに、テキストとして処理するのではなく(HTMLで正しく表示するにはエスケープする必要があります)、安全なテキスト(HTMLかどうか)として処理するように指示します。

于 2012-09-29T20:06:45.850 に答える