8

Django テンプレートの URL 逆呼び出しで .js 変数をパラメーターとして使用する方法はありますか? 以下のアプローチは機能しませんが、これはそれほど驚くべきことではありません。

"fnRender": function ( o, val ) {
     return '<a href="{% url update_task o.aData[0] %}">' + o.aData[1]  +'</a>';
}

Django ビューを介して必要なデータを渡すことができることはわかっていますが、残念ながら .js ライブラリのデータを使用する必要があります。

4

3 に答える 3

19

私が通常行うことは、ある種のデフォルトパラメータをテンプレートのURLに渡すことです。これは、Javascriptで動的に置き換えることができる番兵として機能します。何かのようなもの:

var url = '{% url update_task "foobarbaz" %}';
url = url.replace('foobarbaz', o.aData[0]);
return '<a href="' + url + '">' + o.aData[1]  +'</a>';

 

于 2012-08-10T09:46:00.960 に答える
2

URL を変数としてモジュールに渡すことができます。

<script src="{{ STATIC_URL }}js/my-module.js"></script>
<script>
$(function(){
    MyModule.init('{% url my_url %}');
});
</script>
// js/my-module.js
var MyModule = {
    init: function(url) {
        doSomething(url);
    }
};

または多くの

<script src="{{ STATIC_URL }}js/my-module.js"></script>
<script>
$(function(){
    MyModule.init({
        my_url: '{% url my_url %}',
        other_url: '{% url other_url "param" %}'
    });
});
</script>
// js/my-module.js
var MyModule = {
    init: function(options) {
        var my_url = options.my_url,
            other_url = options.other_url;

        doSomething(my_url);
    }
};

私はこの解決策に少し不満があり、django: django.jsで JavaScript を処理する独自のアプリケーションを作成することで終了しました。このアプリケーションでは、次のことができます。

{% load js %}
{% django_js %}
{% js "js/my-module.js" %}
// js/my-module.js
var MyModule = {
    init: function() {
        var my_url = Django.url('my_url'),
            other_url = Django.url('other_url','param'),
            my_static_file = Django.file('some-file.json');

            doSomething(my_url);
    },
    other: function(param) {
        $.get(Django.url('other_url', param), {urlParam: 'urlParam'}, function(data) {
            doSomethingElse(data);
        });
};

$(function(){
    MyModule.init();
});
于 2012-11-02T16:37:11.660 に答える
0

JavaScript で文字列フォーマットを使用して、値を URL クライアント側に押し込む必要があります。JavaScript で使用する前に、JSON としてエンコードすることを忘れないでください。

于 2012-08-10T09:36:49.817 に答える