2011-07-01 59 views
5

Tôi đang cố gắng tạo điều hướng trang web bằng AJAX. Tôi có menu điều hướng có liên kết đến các chế độ xem khác nhau (sử dụng {% url name %} trong mẫu). Điều tôi đang cố gắng làm là tải nội dung trang bằng AJAX. Nội dung trang tôi đang cố gắng tải được đính kèm trong khối nội dung ({% block content %}).Chuyển đổi trang bằng AJAX ở Django

Tôi cũng tìm thấy đoạn mã này http://djangosnippets.org/snippets/942/, nhưng tôi muốn sử dụng các chế độ xem mà tôi đã xác định và chỉ lấy nội dung bằng ajax.

Mọi đề xuất?

+0

bạn đã giải quyết với django-pjax chưa? –

+0

Về cơ bản tôi đã làm. (với vài thay đổi đối với tập lệnh gốc để cho phép tôi cập nhật nhiều hơn một phần tử HTML trong một yêu cầu) –

Trả lời

6

Bạn nên sử dụng django-pjax được xây dựng chính xác cho loại điều đó.

Tất cả những gì bạn phải làm là, trong mẫu cơ bản, bao gồm toàn bộ trang hoặc chỉ block content dựa trên việc yêu cầu có phải là ajax hay không.

django-pjax thực hiện cuộc gọi AJAX bằng cách sử dụng jQuery và thao tác lịch sử bằng cách sử dụng API trạng thái đẩy HTML5, một cách rất tốt để làm điều đó và cũng giảm xuống một cách duyên dáng trong các phiên bản cũ hơn của IE.

+0

Điều này thực sự khá thú vị. Cảm ơn –

+0

Nó sẽ tuyệt vời nếu nó có thể được sử dụng với Django 1.2 quá. – Paolo

3

Thẻ mẫu như {% block content %} đã biến mất trong khoảng thời gian AJAX thấy mọi thứ. Những gì bạn muốn làm là tạo ra một tên <div> trong khối nội dung của bạn, như:

{% block content %} 
<div id="content"></div> 
{% endblock content %} 

Sau đó, bạn có thể sử dụng một cái gì đó như thế này (jQuery) mã để nạp <div> khi cần thiết:

$("#content").load(url, data, loadComplete); 

nơi url là URL bạn muốn tải (HTML dự kiến ​​trả lại), data là dữ liệu biểu mẫu (nếu có; có thể bỏ qua) và loadComplete là chức năng tùy chọn được gọi khi dữ liệu được tải và có dạng function loadComplete(responseText, textStatus, XMLHttpRequest) {...} . Thậm chí nếu bạn không muốn sử dụng jQuery, bạn có thể lấy nguồn jQuery chưa được rút gọn và xem chúng làm thế nào.

+0

Tôi biết rằng nó đã biến mất, tôi có một div tương tự với một trong những bạn đề nghị. Điều tôi muốn làm ở đây là sử dụng khung nhìn đã được định nghĩa (sẽ được sử dụng mà không có yêu cầu ajax) và tạo một số phản hồi sẽ chỉ trả về nội dung của khối có tên để tôi có thể xử lý nó trong javascript và thay thế nội dung của div. –

Các vấn đề liên quan