在Javascript中使用Django常量

在Javascript中使用Django常量,javascript,django,Javascript,Django,我试图通过从url.py调用url模式来更新数据库中的字段。该模式定义如下(为安全起见,代码略有更改): (r'^pref/(?p\d+)/(?p\d+)/$,'client.views.update_pref'), 键:ENABLE_T(常量.py中定义的int值7) 值:0(布尔整型表示False) 在Javascript中,我尝试在这段代码下调用/pref/ENABLE\T/0,但它根本没有进入$.ajax()函数 $.ajax('/pref/7/0/', { dataType:

我试图通过从url.py调用url模式来更新数据库中的字段。该模式定义如下(为安全起见,代码略有更改):

(r'^pref/(?p\d+)/(?p\d+)/$,'client.views.update_pref'),

键:ENABLE_T(常量.py中定义的int值7)

值:0(布尔整型表示False)

在Javascript中,我尝试在这段代码下调用/pref/ENABLE\T/0,但它根本没有进入
$.ajax()
函数

$.ajax('/pref/7/0/', {
    dataType: 'json',
    success: function(data) {
        alert("Success");
    },
    error: function() {
        // TODO: handle error
        alert("Preferences Error");
    }
});

我宁愿使用ENABLE\u T而不是7来调用该常量。有什么建议吗?谢谢

这取决于JS的位置:

嵌入在页面的HTML中: 如果您在上下文中传递
ENABLE\T
,则可以不使用
pref/{{ENABLE\T}}/0/

在外部JS文件中 在HTML中,定义:

<script>
    window.enable_t = '{{ ENABLE_T }}';
</script>
您还需要将
ENABLE\T
传递到上下文

如何将
启用\u T
传递到上下文 使用一个。您需要定义处理器,并将其添加到
TEMPLATE\u CONTEXT\u PROCESSORS
设置中,如中所示

为什么要使用上下文处理器? 您还可以将
ENABLE\T
直接传递到视图中的上下文。但是,这意味着您必须在每个视图中执行此操作


上下文处理器允许您在使用
RequestContext
时,通过自动将常量添加到上下文中来避免代码重复—如果使用基于类的视图,您甚至可能不必考虑这一点

你有几个选择。首先,可以将javascript文件呈现为模板,以便将模板变量注入javascript。您可以使用django模板,如:

var my_variable=“{{DJANGO_variable}}”; //用变量做些什么

另一种选择是仅呈现变量,并通过ajax在硬编码url上传递它们,或者在html模板中包含变量,同时包含对定义良好的变量进行操作的javascript。例如,定义变量X,并在加载的脚本中使用此变量

还有一种选择是使用django javascript集成脚本(请看django管理脚本)。定义了一些javascript函数来获取静态变量或反转URL

'pref/'+ window.enable_t + '/0/'
var my_variable="{{DJANGO_VARIABLE}}"; //do something with variable