在我的django项目中,我进行了一个动态显示和填充字段的ajax调用。 首先,在我的模板中创建元素:
模板html
<select class="form-control" onChange="AddOptions(this);">
{% for entry in all_test %}
<option id="mainID" value="{{ entry.id }}">{{ entry.descr }}</option>
{% endfor %}
</select>
<div id = "div_val" class="input-group" style="display: none;">
<div class="input-group-btn">
<button id = "btn_val" type="button" class="btn btn-danger">Test</button>
</div><!-- /btn-group -->
<input type="text" class="form-control">
</div>
然后在我的js:
start.js
function AddOptions(VarID) {
$.ajax({
type: "POST",
url: "ajax",
data: {mainID: VarID.value},
success: function (data) {
$.each(data, function (index) {
$("#div_val").show();
console.log("Key: " + data[index].OptionKey+" Val: "+ data[index].OptionVal)
});
}
});
}
urls.py
url(r'^ajax$', mainoptions),
最后我的python函数从urls.py调用:
from frontend.models import temp_main, temp_case, temp_variables
def mainoptions(request):
if request.is_ajax():
mainOptions = temp_variables.objects.filter(main_id=int(request.POST['mainID']))
response = []
for i in mainOptions:
vallabel = {}
vallabel['OptionID'] = i.id
vallabel['OptionKey'] = i.v_key
vallabel['OptionVal'] = i.v_val
response.append(vallabel)
json = simplejson.dumps(response)
return HttpResponse(
json, content_type='application/json'
)
else:
pass
全部完成,我隐藏的div&#34; div_val&#34;在模板中显示,但现在我无法理解如何在模板中使用返回的数据,例如,填充div中元素的值(不使用js func里面的jquery来做它) )。 我怎样才能关闭链模板 - &gt; js - &gt;网址 - &gt;查看方法 - &gt;模板?
非常感谢提前
答案 0 :(得分:1)
使用服务器端渲染时,无法轻松关闭所指的“链”。这是因为Django在这种情况下所做的是在一个初始响应中为所有HTML和JS(在HTML视图中的JS中)提供服务。之后的ajax请求将不会绑定到您在响应中最初发送的变量,因为在调用render()函数时会填充此变量。在那之后,您无法添加或更新发送到HTML模板的变量。
您可以管理渲染HTML的一小部分的唯一方法是使用JQuery或使用Django Rest Framework将后端作为REST API,并转移到更完整的前端框架,如Angular或React。关于服务器端渲染与客户端渲染的讨论很多。
您可以在此处详细了解:
https://medium.com/@adamzerner/client-side-rendering-vs-server-side-rendering-a32d2cf3bfcc