Django的。通过js渲染模型参数

时间:2015-12-29 20:29:57

标签: javascript jquery django

我创建简单的应用程序。此应用程序的主页面按一个模型显示所有对象,当我单击对象时,js脚本在<div>中呈现对象参数 我为这个解决方案使用了一些丑陋的逻辑:在模型方法

中添加带有html标签的所有参数
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

模型领域的最佳实践

*它看起来如何: enter image description here

1 个答案:

答案 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>

希望,这有帮助! :)