问题场景:
Django开发,有后台数据对象info
,要select下拉框中设置从数据库中读出来的值info.credit
为当前值。
解决分析
- 方法:要设置下拉框的当前值,要通过js实现,将select的某个值设为选中,可以通过改对应的selected属性为selected,也可以用jquery框架直接将值为某个值的选项设为选中。
- 取值:但是在js里面要的获取后台数据库的数据有三种途径:
在后台往模板中的js代码块部分填入后台数据。
js中的代码,{{后台填入的值}}或者写进val中不用赋值给变量,第二句是用jQuery框架直接获取元素的,设它的当前值var credit={{info_credit| safe}}$("#id_selector").val(credit);
#django中的代码defget_info(request):
obj_info=ModuleInfo.objects.get(xxx_id=xxx_id)#查询数据库得到一个结果集变量return render(request,'模板.html',{'info':obj_info,‘info_credit’:json.dumps(obj_info.credit)})
在js函数里通过ajax请求获得json数据给js变量赋值
var credit=0
$.ajax({
url:"/ajax_query_credit/",
type:"POST",
data:{"info_id":'0'},
success:function(response){
credit=response['credit']},
dataType:'json',});
#后台defajax_query_credit(request):
id_info=request.POST.get('id_info')
obj_info=ModuleInfo.objects.get(id_info=id_info)#查询数据库得到一个结果集变量return HttpResponse(json.dumps({'credit':id_info.credit}))
从html文件中获取对应元素的值
由于后台传入的是一个对象info,非json数据,在html中是{{info.credit}}直接取的,在js中不行,要为json数据。
(由于不想在后台传的参数中额外加入一个json化的info.credit)所以,这里在js里搞了个小操作。
在js中获取html模板中的已经填好的值,再将html的{{info.credit}}给隐藏掉。
html:<p id="hide_credit" hidden>{{info.credit}}</p>
js:$("#id_credit_selector").val($("#hide_language").text());
- 注意:写入js中的要是json数据,所以写入js的数据后台要转化字典值为json。还有在views中写好了功能函数记得在urls.py绑定url请求哦,格式
path('/xxx/',views.xxx),
。我用的是最后一种,用哪种根据具体情况而定。