在Javascript中获取Django变量:未定义的值

时间:2018-11-26 09:26:22

标签: javascript python django

我有一个小问题,我没有克服解决的办法。我的list of Django objects文件中生成了一个views.py,我想在我的Javascript部分中显示这些变量。

我在Javascript代码中获得了列表,但每个变量均为'undefined'

在我的views.py文件中,我有:

context['results2'] = SubMethod.objects.values_list('name', flat=True).all()

使用此模型:

class SubMethod(EdqmTable):
    name = models.CharField(verbose_name=_('name'), max_length=80, unique=True)

    def __str__(self):
        return self.name

然后,在我的HTML / JS部分:

function get_sub_method_options(keep_cur) {
  var sel_option = $('select#id_method-group').find("option:selected");
  var sel_val = sel_option.val();
  if (!sel_val) {
    $("select#id_method-sub_method").empty();
    var all_sub_methods = "{{ results2 }}";
    console.log(all_sub_methods.name);
      for (var i = 0; i < all_sub_methods.length; i++) {
        $("select#id_method-sub_method").append('<option value="' + all_sub_methods[i].id + '">' + all_sub_methods[i].name + '</option>'); //here add list of all submethods
      }
    return;
  }

  data = {
    'test_method': $('select#id_method-test_method').find("option:selected").val(),
    'group': sel_val
  };
  $.ajax({
    method: "GET",
    url: '{% url 'ajax_method_submethod' %}',
    data: data

  }).done(function (result) {
    reset_select('id_method-sub_method');
    for (var i = 0; i < result['results'].length; i++) {
      if (keep_cur > 0 & keep_cur == result['results'][i].id)
        $("select#id_method-sub_method").append('<option value="' + result['results'][i].id + '" selected>' + result['results'][i].text + '</option>');
      else
        $("select#id_method-sub_method").append('<option value="' + result['results'][i].id + '">' + result['results'][i].text + '</option>');
    }
    ;
  });
}

如您所见,我在这一部分中提取了上下文变量result2

if (!sel_val) {
    $("select#id_method-sub_method").empty();
    var all_sub_methods = "{{ results2 }}";
    console.log(all_sub_methods.name);
      for (var i = 0; i < all_sub_methods.length; i++) {
        $("select#id_method-sub_method").append('<option value="' + all_sub_methods[i].id + '">' + all_sub_methods[i].name + '</option>'); //here add list of all submethods
      }
    return;
  }

在我的终端机上,我得到:

<QuerySet ['50% cell culture infective dose (CCID50)', 'Acetic acid in synthetic peptides', 'Acid value', 'Adenylate cyclase', ...]>

但是在我的Javascript部分中,它显示为:

enter image description here

你知道为什么吗?

编辑:

在我的django代码中,count()显示450

在我的JS代码中:length显示684

在我的数据库中:我有450个元素

1 个答案:

答案 0 :(得分:1)

您需要先将查询集转换为列表。 JS不读取查询集。

context['results2'] = list(SubMethod.objects.values_list('name', flat=True).all())

,并且您可能希望跳过results2并在JS侧加引号,并避免使用安全的屁股,以防止转义字符:

var all_sub_methods = {{ results2|safe }};