2013-09-24 20 views
19

Tôi cố gắng để trở html qua và cuộc gọi Ajax và tôi có đoạn mã sau đây trong quan điểm của tôiReturning rendered Html qua Ajax

if request.is_ajax(): 
t = loader.get_template('frontend/scroll.html') 
html = t.render(RequestContext({'dishes': dishes}) 
return HttpResponse(json.dumps({'html': html})) 

và Ajax tôi

$.ajax({ 
      type: "POST", 
      url: "/filter_home", 
      data: {'name': 'me', 'csrfmiddlewaretoken': '{{csrf_token}}'}, 
      success : function(data) { 
       $('.row.replace').html(data); 
      } 
    }); 

và nó ném sau lỗi

Exception Value: 'dict' object has no attribute 'META' 
Exception Location: /opt/bitnami/apps/django/lib/python2.7/sitepackages/django/core/context_processors.py in debug, line 39 

tôi đang làm gì sai?

Trả lời

48

Có một vài vấn đề với mã của bạn:

Bạn cần phải sử dụng render_to_string.

Bạn cũng không cần chuyển đổi HTML thành json vì bạn đang thay thế trực tiếp nội dung.

Đưa tất cả lại với nhau bạn có:

from django.template.loader import render_to_string 

if request.is_ajax(): 
    html = render_to_string('frontend/scroll.html', {'dishes': dishes}) 
    return HttpResponse(html) 

Cuối cùng phía trước của bạn, bạn cần:

$.ajax({ 
     type: "POST", 
     url: "/filter_home", 
     data: {'name': 'me', 'csrfmiddlewaretoken': '{{ csrf_token }}'}, 
     success : function(data) { 
      $('.row.replace').html(data); 
     } 
}); 
+0

Tôi đã nhận được một lỗi, không có gì đã xuất hiện trên các trang thông qua ajax, tôi in lỗi với cảnh báo jquery và tôi thấy thông báo sau "SyntaxError: Unexpected token <". Ajax có nhận ra thẻ mở html không? –

+0

NVM tôi đã gặp lỗi –

+1

Nếu cuộc gọi AJAX trả về HTML, mẹo là sử dụng '$ ('# result'). Html (dữ liệu)' thay vì '$ ('# result'). Văn bản (dữ liệu)' (thông báo ** '.html' ** thay vì' .text'). – Jabba

-1

Đối số đầu tiên của RequestContext là đối tượng yêu cầu.

Bạn có thể thêm đối tượng yêu cầu hoặc sử dụng lớp Ngữ cảnh thay thế.

-2

tham số đầu tiên để RequestContext() nên request, vì vậy cập nhật dòng trong mã của bạn như

html = t.render(RequestContext(request, {'dishes': dishes}) 
Các vấn đề liên quan