我的网站几乎完成了,除了最后一部分,我需要使图库页面支持ajax才能使用Ajax更改页码。
图库页面视图:
def gallerypages(request, page): items = Example.objects.all().order_by('-pk') categories = Categorie.objects.all() paginator = Paginator(items, 12) try: itemsList = paginator.page(page) except PageNotAnInteger: itemsList = paginator.page(1) except EmptyPage: itemsList = paginator.page(paginator.num_pages) if items.count()>1: return render_to_response('gallery.html', {'items': itemsList,'categories': categories,}, context_instance = RequestContext(request))
Dajax / Dajaxice的记录不是很好…我只需要显示一些图像即可。
这是使用Dajax / Dajaxice的方法,这是为了在Django中简化AJAX:
pip
pip install django-dajaxice
pip install django-dajax
获取库。无论如何,请确保遵循doc说明安装Django应用,并将必需的Javascript库加载到中gallery.html。(请注意,您需要安装jQuery或类似的JS框架才能使Dajax正常工作。)
gallery.html
items
categories
gallery_content.html
<div>
<div id="gallery-content"></div>
您正在做的是#gallery-content为HTML 创建一个占位符,稍后将通过Dajaxice调用为每个页面生成HTML。
#gallery-content
<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应用的名称。
onclick
#page- number
gallerypages_content
Dajaxice.myapp.gallerypages_content
myapp
gallerypages
ajax.py
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) # ... code 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将所有内容挂钩。
page
itemsList
render_to_string
#gallery- content
Dajax.process
@dajaxice_register
我还没有具体测试过任何一项,但这是基于我如何让Dajaxice / Dajax为我工作,我希望它对您有用-至少可以让您入门!