【发布时间】:2016-10-18 23:04:00
【问题描述】:
我正在尝试在某些已定义的 div 中加载该项目的单击该项目的一些详细信息。我有两种方法可以做到这一点。
注意:我使用 python/django 作为后端,在前端使用 jquery
我。我的第一种方式
Views.py
def get_item_data(id):
obj = MyClass.objects.get(pk=id)
html = """
<div>All Details Here, 1. {0}, 2. {1}</div>
""".format(str(obj.id), str(obj.name))
return HttpResponse(html)
myapp.js
$('#myid').on('click', function(){
$.ajax({
type: "GET",
url: GET_DATA,
data: dataString,
success: function(res) {
$('#addl_container').html(res);
}
});
});
二。另一种方式
Views.py
def get_item_data(id):
obj = MyClass.objects.filter(pk=id).values()
return HttpResponse(simplejson.dumps(obj))
myapp.js
$('#myid').on('click', function(){
$.ajax({
type: "GET",
url: GET_DATA,
data: dataString,
success: function(res) {
$('#addl_container').html(
"<div>All Details Here, 1. "+ res.id +", 2. "+ res.name + "</div>"
);
}
});
});
这两个过程都有效。 我认为事先创建 html 并加载它可能不是一个好的选择,因为我们使用 python 代码创建 html 然后加载它。如果我尝试从不同的应用程序访问相同的 url,它也不会工作。 通过从 json 响应中提取数据从 jquery 中创建 html 似乎是一个不错的解决方案,但有时当数据很大时,它需要在用户端使用更多 ram,这会使系统变慢。
我很困惑使用哪一个,请从这两个中提出一个更好的解决方案。如果有的话,还建议其他比这更好的解决方案吗?
提前致谢。
【问题讨论】:
-
在我看来,这取决于您渲染 HTML 的数量和频率。因此,例如,如果您只需要渲染一个小的
<span>,那么您的操作方式就可以了。但是如果你需要渲染一些大的 HTML,那么最好使用像 Handlebars 这样的模板引擎 -
Javascript = 客户端处理。 Php = 服务器处理。如果你有一个体面的服务器,第二个对用户来说会更好。许多用户仍然拥有相对较旧的 PC,或者,对于工作而言,可能被认为是动力不足的 PC,尤其是与开发人员的 PC 相比时。在客户端上运行过多会影响性能/用户体验。
-
另一种方式,如果你有一个更大的 html,那么你可以在
get_item_data中定义模板并返回该模板 -
问得好人,你有一个美好的未来:D
-
我更喜欢使用 django 的
render_to_string方法。因此,我的视图实际上呈现了我的模板并通过 HttpResponse 将其返回给我的 ajax 请求。然后只需使用 javascript 将其插入到当前模板中。我更喜欢这种方法,因为它从字符串中提取原始 html,并将其保存在 html 模板中,而不是保存在视图或 javascript 中的字符串中。另外,它还允许您像使用普通 django 模板一样使用 django 的模板标签,并且您可以将上下文传递给该模板。
标签: javascript jquery python ajax django