【问题标题】:Update form values in Django without reloading page?在不重新加载页面的情况下更新 Django 中的表单值?
【发布时间】:2011-10-02 02:41:17
【问题描述】:

我目前正在处理 Django 中的一个项目,并且目前我正在处理一个包含多个元素的表单。每个元素都是动态的,并且需要在其上方的元素更改值时更新其选项。我知道每当另一个元素的值发生变化时,我都可以使用 AJAX 来更新元素内容,但我想知道是否有更多的 Django 方式,或者无论如何都可以在服务器端执行此操作?我的主要目标是在不每次都重新加载整个页面的情况下做到这一点,感谢任何反馈。谢谢!

更新:我的问题与Django ajax form, choicefields dependancy 非常相似,但我不完全理解答案中发生了什么。如果有人可以更详细地解释它,那将解决我现在所有的问题。我正在尝试该答案所说的内容,但是当我尝试加载它时出现 500 和 403 错误。

跟进:显然我所有的问题都来自一个过时的 jQuery 库,一旦我更新它,一切都恢复正常了!

【问题讨论】:

  • 只需创建一个视图并使用jquery+ajax。我只是查看了链接,它非常不言自明。
  • 我不知道回答者从哪里获得模型中引用的“book_view”。这可能对你来说是不言自明的,但我仍然迷失在正在创建的视图中发生的事情
  • 你能再具体一点吗?页面上不存在字符串book_view...
  • 没有可能方法可以在不使用Javascript的情况下从服务器更新客户端上的内容。

标签: ajax django forms django-forms dynamic-list


【解决方案1】:

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 的调用失败会发生什么?),基本上就这些了。

【讨论】:

  • 谢谢大卫,我会试试这个,感谢您抽出时间帮助我
猜你喜欢
  • 2010-12-22
  • 1970-01-01
  • 2015-07-31
  • 2022-11-27
  • 1970-01-01
  • 2021-07-17
  • 1970-01-01
  • 2020-10-04
相关资源
最近更新 更多