0

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

(r'^pref/(?P<key>\d+)/(?P<value>\d+)/$', 'client.views.update_pref'),

键:ENABLE_T(int 值 7,在 constants.py 中定义)

值:0(布尔 int 为 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_T 而不是 7 来调用该常量。有什么建议么?谢谢!

4

2 回答 2

1

这取决于 JS 在哪里:

嵌入到页面的 HTML 中:

pref/{{ ENABLE_T}}/0/只要你在上下文中传递,你就可以逃脱ENABLE_T(见下文)。

在外部 JS 文件中

在您的 HTML 中,定义:

<script>
    window.enable_t = '{{ ENABLE_T }}';
</script>

在您的 JS 文件中,使用

'pref/'+ window.enable_t + '/0/'

您还需要传递ENABLE_T到上下文。

如何传递ENABLE_T给上下文

使用上下文处理器。您需要定义处理器,并将其添加到TEMPLATE_CONTEXT_PROCESSORS设置中,如文档中所示

为什么使用上下文处理器?

在您的视图中,您也可以ENABLE_T直接传递给上下文。但是,这意味着您必须在每个视图中都这样做。

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

于 2013-07-08T16:13:04.547 回答
0

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

var my_variable="{{DJANGO_VARIABLE}}";
//对变量做一些事情
.

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

另一种选择是使用 django javascript 集成脚本(查看 django-admin 脚本)。定义了一些 javascript 函数来获取例如一些静态变量或反转 url。

于 2013-07-08T16:16:41.043 回答