这是使用Dajax / Dajaxice的方法,这是为了在Django中简化AJAX:
- 根据文档安装Dajaxice和Dajax。文档似乎没有提及它,但是您也可以使用
pip
,即pip install django-dajaxice
pip install django-dajax
获取库。无论如何,请确保遵循doc说明安装Django应用,并将必需的Javascript库加载到中
gallery.html。(请注意,您需要安装jQuery或类似的JS框架才能使Dajax正常工作。)
- 在中
gallery.html
,将items
和categories
呈现为HTML 的部分隔离。将此部分复制到一个单独的Django模板中,例如,gallery_content.html
然后用特定IDgallery.html
的空白替换该部分<div>
,例如<div id="gallery-content"></div>
您正在做的是
#gallery-content为HTML 创建一个占位符,稍后将通过Dajaxice调用为每个页面生成HTML。
- 现在,在中的其他位置
gallery.html
,为用户创建一种告诉您要转到哪个页面的方法,例如
<input id="page-number"> <button onclick="Dajaxice.myapp.gallerypages_content(Dajax.process, {'page': document.getElementById('page-number').value})">Go to page</button>Javascript
onclick代码(每当用户单击按钮元素时都会调用)执行两件事:(1)获取
#page-number输入元素的值,以及(2)
gallerypages_content异步将其发送到Django
视图,即没有正常的网络通过
Dajaxice.myapp.gallerypages_contentJavascript调用加载浏览器页面。请注意,
myapp应将其替换为Django应用的名称。
- 最后,您需要创建
gallerypages_content
视图-这是现有gallerypages
视图的变体,已修改以与Dajaxice / Dajax一起使用。Dajaxice进行了硬编码以在中查找此类视图ajax.py
,因此请ajax.py
在您的myapp
文件夹中创建如下:
from django.template.loader import render_to_string from dajax.core import Dajax from dajaxice.decorators import dajaxice_register @dajaxice_register def gallerypages_content(request, page): page = int(page) # ... pre to calculate itemsList and categories as before ... html = render_to_string('gallery_content.html', {'items': itemsList,'categories': categories,},context_instance = RequestContext(request)) dajax = Dajax() dajax.assign('#gallery-content', 'innerHTML', html) return dajax.json()这就是上面的代码所做的:(1)将
page参数(现在是字符串)(即
#page-number输入元素的原始字符串值)转换为Python整数;(2)进行与之前相同的计算,得到
itemsList和
categories;
(3)用于
render_to_string呈现
gallery_content.html为HTML字符串,而不是普通的Django
HTTP响应;(4)使用Dajax API创建指令以将HTML注入
#gallery-contentdiv;(5)作为视图的响应,并以JSON格式返回这些指令。
onclick处理程序中的Dajaxice调用实际上将接收这些指令并对其执行操作(严格来说,是由
Dajax.process回调执行此操作),从而导致HTML出现。请注意,您需要
gallerypages_content使用
@dajaxice_register
-有助于Dajaxice将所有内容挂钩。
我还没有具体测试过任何一项,但这是基于我如何让Dajaxice / Dajax为我工作,我希望它对您有用-至少可以让您入门!



