我想与大家分享我目前正在使用Django进行Ajax的工作。我想得到你的意见/评论,看看我做得对。
我当然会过度简化代码,只是为了展示这个过程。
这是我的模板代码:
<!-- I store the full url to access object details so I can use url feature.
If I just store the pk, I would have to hardcode the url to fetch the object
detail later. Isn't it? -->
<ul>
{% for item in items %}
<li url="{% url project.item.views.details item.pk %}">{{ item.name }}</li>
{% endfor %}
<ul>
<div id="details"></div>
<script>
$("li").click(function(elmt){
// I just reuse the url attribute from the element clicked
var url = $(elmt.currentTarget).attr('url');
$.getJSON(url, function(data) {
if (data.success) {
$("#details").html(data.html);
} else {
$("#details").html("Something went wrong");
}
});
});
</script>
以下是我在视图中使用的代码:
def details(request, item_id):
item = Items.objects.get(pk=item_id)
# Just render a view with the details, and return the view
html = render_to_string("items/_details.html", {'item': item})
return HttResponse(simplejson.dumps({'success': True, 'html': html}), mimetype="application/json")
您如何看待我这样做?
提前感谢您的帮助!
答案 0 :(得分:2)
Django代码没有任何问题,但您可能希望它也适用于非JavaScript客户端并使用有效的HTML:
<ul>
{% for item in items %}
<li><a href="{{ item.get_absolute_url }}">{{ item.name }}</a></li>
{% endfor %}
<ul>
$("a").click(function(){
// I just reuse the url attribute from the element clicked
// li does not have an url attribute
var url = $(this).attr('href');
$.getJSON(url, function(data) {
if (data.success) {
$("#details").html(data.html);
} else {
$("#details").html("Something went wrong");
}
});
return false;
});
def details(request, item_id):
item = Items.objects.get(pk=item_id)
# Just render a view with the details, and return the view
if request.is_ajax():
html = render_to_string("items/_details.html", {'item': item})
return HttResponse(simplejson.dumps({'success': True, 'html': html}), mimetype="application/json")
else:
#non ajax request rendering complete html
return render_to_response("items/detail.html", {'item': item})
答案 1 :(得分:0)
我个人更喜欢使用中间件来托管Web服务,因为它们允许您不完整地加载Django,但仍然可以访问您需要的内容。
尽管如此,使用Web服务的视图肯定是有效的。