我目前正在Django开展一个项目,目前我正在开发一个包含多个元素的表单。每个元素都是动态的,当它上面的元素改变值时,需要更新它的选项。我知道我可以使用AJAX更新元素内容,只要另一个更改值,但我想知道是否有更多的Django方式,或者无论如何做这个服务器端?我的主要目标是每次都不重新加载整个页面,任何反馈都值得赞赏。谢谢!
更新:我的问题与Django ajax form, choicefields dependancy非常相似但我不完全理解答案中的内容。如果有人能够更详细地解释一下,这将解决我现在的所有问题。我正在尝试那个答案,但是当我尝试加载它时,我得到500和403错误。
跟进:显然我的所有问题都来自一个过时的jQuery库,一旦我更新它,一切都恢复了工作!
答案 0 :(得分:5)
AFAIK没有一个规范的Django做Ajax的方式......但它是仙女直接做自己:
首先,您必须创建一个视图,该视图返回更新视图所需的任何JSON数据。例如,省内的城市列表:
from django.utils import simplejson as json
def list_cities(request):
cities = city_names_in_province(request.GET["province"])
return json.dumps(cities)
其次,你必须从HTML中调用该视图(假设是jQuery):
<select id="provinces">
…
</select>
<select id="cities" disabled="true">
<option>---</option>
</select>
<script>
$("#provinces").change(function() {
var province = $(this).val();
$.getJSON("{% url list_cities %}", { province: province }, function(cities) {
var cities_select = $("#cities");
… put the `cities` list into the `cities_select` …
});
});
</script>
而且,除了“漂亮”和错误检查(例如,如果对list_cities
的调用失败会发生什么?),那基本上就是它的所有内容。