2017-11-30 2 views
1

내 응용 프로그램의 사용 사례는 홈페이지에 가구 목록을 표시하는 것입니다. 모든 가구에 빠른 미리보기 버튼이있어 클릭하면 상세 정보가 표시됩니다. 나는 아약스를 사용하려고했다. 가구 빠른 미리보기 버튼을 클릭하면 내가 클릭 한 가구 슬러그를 가져 와서 가구 세부 정보를 얻습니다. 이 작업까지는 작업과 모달이 표시되지만 내용을 표시 할 수는 없습니다. 어떻게하면 모달 바디에 내용을 표시 할 수 있습니까? 여기 Django : Ajax를 모달로 사용하여 제품 세부 정보 표시

내가 시도 무엇

def ajax_furniture_detail(request): 
    furniture_slug = request.GET.get('slug', None) 
    qs = Furniture.objects.get(slug=furniture_slug) 
    cart_obj, new_obj = Cart.objects.new_or_get(request) 
    context = { 
    'furniture': model_to_dict(qs), 
    'cart': model_to_dict(cart_obj), 
    'status': 'ok' 
    } 
    return JsonResponse(context) 

{% block content %} 
    {% include 'furnitures/furnitures_home.html'%} 
{% endblock content %} 
{% block js %} 
    {{ block.super }} 
    <script> 
    $(document).ready(function(){ 
     $('.quick-view-button').click(function() { 
      var _this = $(this); 
      var slug = _this.attr("data-slug"); 
      $.ajax({ 
      url: '/ajax/furniture', 
      type: "get", 
      data: {'slug': slug}, 
      success: function(data) { 
       $('#product-quick-view-modal').modal('show'); 
       $('#product-quick-view-modal').find('.modal-body').html(data.html); 
      }, 
      error: function(err) { 
       console.log('error', err); 
      } 
      }) 
     }) 
    }); 
    </script> 
{% endblock js %} 


furnitures_home.html 

{% load static %} 
<div class="furnitures" id="content"> 
    {% for furniture in furnitures %} 
     {% if forloop.first %}<div class="row products">{% endif %} 
     <div class="col-md-4 col-sm-3"> 
     <div class="product"> 
      <div class="image" style="height: 205px;"> 
      <div class="quick-view-button" data-slug={{ furniture.slug }}> 
       <a href="#" data-toggle="modal" data-target="#product-quick-view-modal" class="btn btn-default btn-sm">Quick view</a> 
      </div> 
      {% endif %} 
      </div> 
     </div> 
     </div> 
    {% endfor %} 
</div> 

<div class="modal fade" id="product-quick-view-modal" tabindex="-1" role="dialog" aria-hidden="false" style="display: none;"> 
    <div class="modal-dialog modal-lg"> 
     <div class="modal-content"> 
     <div class="modal-body"> 
      <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> 
      <p>Hello</p> 
      <p>{{furniture.name}}</p> 
     </div> 
     </div> 
    </div> 
    <!--/.modal-dialog--> 
</div> 
+0

현재의 상태가 무엇인가

rendered = render_to_string('product_detail_snippet.html', context, context_instance=RequestContext(request)) return JsonResponse({'product_snippet': rendered}) 

그리고 아약스 성공

? 어떤 오류가 있습니까? – rajkris

+0

Ajax 응답으로 보내는 데이터에는 "html"이라는 이름이 없습니다. 이보기에서 템플릿을 렌더링하고 싶습니까? –

답변

2
이렇게하는 한 깔끔한 방법은 제품 세부 사항에 대한 미리보기의 HTML을 사용하고 render_to_string를 사용하여 제품 세부 HTML 스 니펫 보내고 단지 모달에서 그 HTML 코드를 대체하는 것입니다

.

$('#product-quick-view-modal').find('.modal-body').html(data.product_snippet); 
+0

간단한 스 니펫을 보여줄 수 있습니까? – milan

+0

이것은 단순히 html 파일이며, HTML에서는 모달로 제품 세부 정보를 보여주는 부분입니다. render_to_string을 사용하고 뷰 자체에서 HTML을 처리하고이 html 문자열을 AJAX에 대한 응답으로 전달하고 마침내 위와 같이 대체해야합니다. – rajkris

관련 문제