0

我有一个 django 表单,其中包含两个用于选择气候参数的字段。这两个字段都由相同的 CHOICES 填充,但我需要第二个字段受第一个选项的影响。基本上,如果在第一个参数中选择了一个参数,那么它应该从第二个选项中删除。

我现在有代码可以很好地解决这个问题,除了一个问题。我需要这些字段具有语言意识。

表格.py

class ClimateForm(forms.Form):
    ...
    param1 = forms.ChoiceField(choices=PARAM_CHOICES, label=_('Y axis one'), initial=_('Not Specified'),
                widget=forms.Select(attrs={"onChange":'activateParam()'}),
                )
    param2 = forms.ChoiceField(choices=PARAM_CHOICES, label=_('Y axis two'), initial=_('Not Specified'),
                required = False,
                )
    ...

然后我调用activateParam()执行此操作的函数:

filter_form.js

function activateParam() {
    // get value to exclude from select
    var param1Val = document.getElementById("id_param1").value;
    // get next element id
    var param2 = document.getElementById("id_param2");
    // param2.setAttribute("style", "display:block");
    updateSelect($('select[name=param2]'), param1Val);   
 }


function updateSelect(select, value) {
    // find and remove existing options
    select.find('option').remove();
    // loop through results and append to select as options
    for (var k in climate_params) {
        if (k!=value) {
            select.append($('<option value="'+k+'">'+climate_params[k]+'</option>'));
        }
    }
} 

climate_params只是填充第二个字段的值和字符串数组:

var climate_params = {
    '': 'Not Specified',
    'mean_air_temp': 'Mean Air Temperature', 
    'min_air_temp': 'Min Air Temperature', 
    'max_air_temp': 'Max Air Temperature',
    'sea_temp': 'Sea Surface Temperature',
    'mean_rel_hum': 'Mean Relative Humidity',
    'precipitation': 'Preciptitation',
};

所以,我可以修改这个数组或包含另一个数组,但我需要知道如何将语言状态传递给这个 JS 脚本。有什么方法可以直接在 JS 中访问语言变量吗?

非常感谢任何帮助。

4

1 回答 1

0

您可以直接在 js 中标记翻译字符串
或者初始化climate_paramsw/ Python 翻译对象:

{# in template #}
var climate_params = {
    {% for param, label in PARAM_CHOICES %}
    '{{ param|escapejs }}: '{{ label|escapejs }}',
    {% endfor %}
};

另请查看检查我如何在 django 中获取当前语言?. 如果您通过 Ajax 传递标签,则翻译已经完成。

于 2012-05-12T06:13:16.053 回答