在Javascript中使用Django常量
我试图通过从url.py调用url模式来更新数据库中的字段。该模式定义如下(为安全起见,代码略有更改):在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:
(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