简单的应用程序从django视图传递值到javascript

时间:2012-10-28 09:00:03

标签: django django-views

我正试图弄清楚如何做到这一点。我是新手所以请尽可能详细解释。

我在views.py

中这样做
dict1 = simplejson.dumps(dict1)
return render_to_response('main_page.html', {
                    'js_testsuite':testsuite_dict,
                    'js_testset':js_testset,
                    'dict1':dict1})

在main_page.html

{% if js_testsuite %}               
<select id="testsuites" name="testsuite" onchange="setOptions(document.selection.testsuite.selectedIndex);">
    {% for key, value in js_testsuite.items %}
            <option value={{ value }} name="testsuite">{{ key }}</option>
    {% endfor %}
</select>
{% endif %}

在包含函数setOptions(value)的setoptions.js中,我传递了选择框的选定索引,并使用此值我必须设置第二个选择框,此选择框的数据必须来自上面给出的views.py。 另外,我尝试了

var value_from_django = {{ dict1 }};

我遗失的其他事情是什么。能否详细解释一下。我这样做了2天。

  • 有没有办法可以直接将django视图中的值传递给javascript绕过django模板?
  • 我可以将django视图中的信息传递给html模板,然后传递给javascript吗?

我指的是一个简单的javascript而不是jquery。

感谢您的支持,

维奈

1 个答案:

答案 0 :(得分:1)

除非你使用ajax调用来启动单独的请求,否则你不能将值传递给javascript,除非你做了一些非常不寻常的事情,比如将数据嵌入到响应头中(实际上不这样做,它不是什么响应标题是为了!)。响应(包括标题和正文(正文是模板生成的部分)是应用程序提供给客户端的信息总和,因此除非您生成其他请求并使用ajax获取其他响应,你别无选择。

如果您不想这样做,那么您通过模板将信息传递给javascript的选项基本上如下:

  • 使用内联标记,通过模板系统动态创建格式正确的javascript。您拥有的示例行var value_from_django = {{ dict1 }};基本上就是我在这里所说的,除了我不确定您是否可以将django中的dict传递给javascript之类的,因为django的文本输出中的dict模板不太可能是javascript变量声明的正确格式。所以,你可以......
  • 将您的数据转换为JSON并将其放入您的模板中,然后使用javascript进行处理。 (这通常是通过ajax调用完成的,但没有什么可以阻止你直接将JSON数据注入初始模板。)
  • 或者使用您想要的数据填充HTML,然后使用javascript找到包含数据的HTML标记并解析数据。

如果您尝试传递简单变量(如整数),则使用第一个或第三个选项可能最容易。如果您尝试传递更复杂的数据结构(如字典),您可能最好使用JSON(这就是它的用途!)

我想向您提供更详细和具体的说明,但为此您需要发布更多详细信息,了解您当前的方法究竟出现了什么问题,以及您希望的功能是什么。

顺便说一句:如果在这个页面上包含jquery并且使用它而不是尝试使用基本的javascript完全可行,你应该这样做。它会让你的生活变得更加轻松。