0

jquery スクリプトで django コンテキスト変数を使用しようとしています。

まず第一に、これは機能します:

index.html

<head>
    <script type="text/javascript">
        var page_size = {{page_obj.paginator.num_pages}};
    </script>

    <script type="text/javascript" src="{% static 'js/paginate.js' %}"></script>
</head>

js/paginate.js

$(document).ready( function() {
    alert(page_size);                           //THIS WORKS!!!
});



ただし、ユーザーが自分の変数を表示できるようにしたくないので、「paginate.js」ファイルにグローバル変数宣言を追加しました。

index.html

<head>
    <script type="text/javascript" src="{% static 'js/paginate.js' %}"></script>
</head>

js/paginate.js

var page_size = {{page_obj.paginator.num_pages}};              //Exactly the same as the above!!

$(document).ready( function() {
    alert(page_size);                           //ERROR!!!
});


奇妙なことに、これによりエラーが発生します。

SyntaxError: invalid property id
    var page_size = {{page_obj.paginator.num_pages}};

最初のものは機能するのに、2番目のものはエラーが発生する理由がわかりません.2番目のものはまったく同じなので..?? 何か案が??

ありがとう..

4

2 に答える 2

2

TL;DR

Django テンプレート プロセッサによって解析されないため、変数を静的ファイルに渡すことはできません。

説明

最初の例は{{ page_obj.paginator.num_pages }}、解析されて数値に変換されるテンプレートに を設定しているため機能します。Django を使用して (任意の方法で) テンプレートを返す場合、renderテンプレートのみがレンダリングされます。テンプレートにリンクされた CSS と Javascript は静的ファイルと呼ばれます。つまり、これらはリソースであり、Django テンプレート プロセッサによって読み取られません。

ページの img に変数を挿入するとします。意味はありますか?いいえ?ただし、同じ動作です。

これを行う方法は?

JavascriptファイルのAJAXリクエスト(警告:ここでは少しやり過ぎ)、または最初の方法を使用してデータを取得できます。

関連トピック:

于 2013-08-20T11:26:04.973 に答える
0

Django では、変数をビューから JS/html ファイルに渡す必要がある場合、ファイルが Django テンプレート エンジンによって解析されることを確認する必要があります。つまり、ファイルは Django によって提供される必要があります。

ここでは、含まれている Javascript はサーバー上の Django テンプレート プロセッサによって処理されないため、機能しません。

JS ファイルで使用するテンプレート変数を渡す必要がある場合は、質問に記載されている最初の方法を使用する必要があります。つまり、<script>グローバル変数がそれらのテンプレート変数を含むように宣言されている小さなブロックを作成します。次に、任意の JS ファイルは、グローバル js 変数を探すことによって値を取得できます。

于 2013-08-20T09:56:52.647 に答える