我创建简单的应用程序。此应用程序的主页面按一个模型显示所有对象,当我单击对象时,js脚本在<div>
中呈现对象参数
我为这个解决方案使用了一些丑陋的逻辑:在模型方法
class SimpleObject(models.Model):
param1 = models.CharField(max_length=200)
param2 = models.CharField(max_length=200)
def object_info(self):
param1 = '<p>' + self.param1 + '</p>'
param2 = '<p>' + self.param2 + '</p>'
return param1 + param2
通过ListView发送:
class SimpleObjectList(ListView):
model = SimpleObject
并像这样渲染(使用bootstrap):
<div class="col-md-4">
{% for object in object_list %}
<ul class="nav nav-pills nav-stacked">
<li class="object_item" name="{{object.object_info}}">
<a href="#">{{object.param1}}</a></li>
</li>
</ul>
{% endfor %}
</div>
<div class="col-md-8 object_info">
</div>
$('.object_item').click(function(){
var simple_object = this;
$('.object_info').empty();
$('.object_info').append($(simple_object).attr('name'));
});
看起来我想要,但我绝对肯定,对这个问题有更好的解决方案。你能帮我找一些js
模型领域的最佳实践答案 0 :(得分:1)
您应该使用the manual加载DOM的一部分,这应该用于显示来自服务器的新获取的数据。
这个想法是:
<div>
{% for object in object_list %}
<a class="obj_cls" data-object_id="{{ object.id }}"></a>
{% endfor %}
</div>
<div class="snippet_wrapper">
{% include "html_snippet_only_for_this_part.html" %}
</div>
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<script>
$(function(){
$('.obj_cls').on('click', function () {
var object_id = $(this).data('object_id');
$('.snippet_wrapper').html('').load("/"+object_id, function () {
});
});
});
</script>
以及带有网址/PK/
的视图,其中object_id
是被点击对象的ID,应该这样做:
def PartyDetailView(DetailView):
model = YourModel
template_name = "html_snippet_only_for_this_part.html"
,html_snippet_only_for_this_part.html
的内容只是:
<div>
{{ object.name }} etc etc...
</div>
希望,这有帮助! :)