每个人。我从Python和Django开始,我想在代码中添加一些Ajax。
我正在通过在模板上显示产品以及更改其价格的输入来进行练习。 我已经能够更改他在数据库上的值,但是在那之后,我想更新模板的上下文以查看新值。我要更新的字段是表的最后一行。
{% csrf_token %}
<table>
<tr>
<th>Product</th>
<td>{{product.name}}</td>
</tr>
<tr>
<th>Price</th>
<td><input id="price" type="text" value="{{product.price}}" placeholder="Price" autocomplete="off"/></td>
</tr>
<tr>
<td colspan="2" style='background:none'><input id="send" type="button" value="Update"/></td>
</tr>
<tr>
<th>Current values:</th>
<td>{{product.name}} : ${{product.price}}</td>
</tr>
</table>
JS:
$("#send").click(function(){
$.post("/inicio/acciones/update/", {search: 1, price : $("#price").val()} ).done(function(res){
})
});
后端
def update(request):
"""backend changes
...
"""
t = loader.get_template('inicio/index.html')
product= Product.objects.get(pk=search)
context = {
'product' : product,
}
t.render(context)
return HttpResponse(product.price)
“ product”变量具有正确的值,但我的模板未更新。
如何更新上下文?
答案 0 :(得分:0)
由于您正在使用AJAX,因此我假设您要执行的任何操作都希望在不重新加载整个页面的情况下进行。
#send
按钮运行某些AJAX请求。提交此表单并将其指向相同的URL将加载新页面。这里要注意的是,您的表单还将发送一些额外的数据以及我们可以在视图中读取的GET请求。然后,您的视图可以在收到GET请求后尝试读取该请求的内容。如果没有任何内容,则可以默认显示所有内容(假设您现在正在执行此操作),但是如果请求中有内容,您可以阅读该内容,并使用该信息过滤发送到模板的查询集。您最终将使用相同的模板,但是它将根据视图给出的查询集显示或多或少的信息。