在不重新加载页面的情况下更新 Django 中的表单值?
Posted
技术标签:
【中文标题】在不重新加载页面的情况下更新 Django 中的表单值?【英文标题】:Update form values in Django without reloading page? 【发布时间】:2011-10-02 02:41:17 【问题描述】:我目前正在处理 Django 中的一个项目,并且目前我正在处理一个包含多个元素的表单。每个元素都是动态的,并且需要在其上方的元素更改值时更新其选项。我知道每当另一个元素的值发生变化时,我都可以使用 AJAX 来更新元素内容,但我想知道是否有更多的 Django 方式,或者无论如何都可以在服务器端执行此操作?我的主要目标是在不每次都重新加载整个页面的情况下做到这一点,感谢任何反馈。谢谢!
更新:我的问题与Django ajax form, choicefields dependancy 非常相似,但我不完全理解答案中发生了什么。如果有人可以更详细地解释它,那将解决我现在所有的问题。我正在尝试该答案所说的内容,但是当我尝试加载它时出现 500 和 403 错误。
跟进:显然我所有的问题都来自一个过时的 jQuery 库,一旦我更新它,一切都恢复正常了!
【问题讨论】:
只需创建一个视图并使用jquery+ajax。我只是查看了链接,它非常不言自明。 我不知道回答者从哪里获得模型中引用的“book_view”。这可能对你来说是不言自明的,但我仍然迷失在正在创建的视图中发生的事情 你能再具体一点吗?页面上不存在字符串book_view
...
没有可能方法可以在不使用javascript的情况下从服务器更新客户端上的内容。
【参考方案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
的调用失败会发生什么?),基本上就这些了。
【讨论】:
谢谢大卫,我会试试这个,感谢您抽出时间帮助我以上是关于在不重新加载页面的情况下更新 Django 中的表单值?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在不重新加载页面的情况下更新 django 上下文字典?
Django - 如何在不刷新页面的情况下保持在同一页面上?
如何在不重新加载页面的情况下更新从 firestore 检索到的标记在我的地图上?