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 处理 javascript:django.js。有了这个应用程序,我可以:

{% 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 回答