LoginSignup
0
1

JavaScriptとJinja2の組合わせは意外に相性が良い事例

Last updated at Posted at 2023-06-03

本記事の背景

JavaScriptとJinja2の組合わせの記事が少なくて、明示している記事があまり見かけない。
本日は簡単でかつ便利の事例を紹介する

本記事の前提条件

・Pythonの基本文法を理解している
・Flaskのチュートリアルを理解している
・Jinja2の触ったことがある
・JavaScriptの基本文法を理解している

まずはサーバー側から

サーバー側からFlaskのRenderTemplateを使用して、以下のデータをフロント側に渡す

@app.get('/')
def index():
	d_x = [80, 50, 90]
	d_y = [30, 40, 50]
	return render_template('index.html', d = zip(d_x, d_y))

HTML側

<div class="card-title">graph: 1</div>
      <div>
        <canvas id="ScatterChart" width="400" height="350">
        <script>
          function ScatterChart(){
            var ctx = document.getElementById("ScatterChart");
            var myScatterChart = new Chart(ctx, {
            type: 'scatter', 
            data: { 
              datasets: [
                {
                  label: 'Label test',
                  data: [
                  {% for x,y in dd %}
                    {x: {{ x }}, y: {{ y }}},
                    {% endfor %}
                  ],
                  backgroundColor: 'RGBA(225,95,150, 1)',
                }]
              },
              options: {
              responsive: false
              }
          });
        }
        ScatterChart()
        </script>
        </canvas>
      </div>

上記のHTMLの中でとりわけ下記の部分が、今回の重点要素です。

 data: [
          {% for x,y in dd %}
          {x: {{ x }}, y: {{ y }}},
          {% endfor %}
       ]

{{x}}と{{y}}がJinja2要素をセットしている。
data:[{x:y}]はJavaScriptの要素

表示結果

image.png

参考文献

制限事項

HTML本体にJavaScriptを記述しないと表示されない。別のJavaScriptファイルに切り出した場合は、Jinjaの変数を使う場合は別途、渡す工夫が必要。完全JavaScriptの文法で行わないといけないと思われます。理由は(JinjaのTemplate RenderingはHTMLどまりだと思われます)ほかにこのあたりの情報を知っていたら教えてください。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1