我几乎完成了我的网站,除了最后一部分,我需要使画廊页面支持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))
Run Code Online (Sandbox Code Playgroud)
Dajax/Dajaxice没有很好的记录...我只需要显示一些图像.
Gho*_*r21 10
以下是如何使用Dajax/Dajaxice来实现它,这意味着在Django中使AJAX更容易:
根据文档安装Dajaxice和Dajax.文档似乎没有提到它,但你也可以使用pip,即
pip install django-dajaxice
pip install django-dajax
Run Code Online (Sandbox Code Playgroud)
获得图书馆.在任何情况下,请确保按照doc说明安装Django应用程序并获取必要的Javascript库gallery.html.(注意,您需要为Dajax安装jQuery或类似的JS框架才能工作.)
在gallery.html,将items和categories所呈现的部分隔离为HTML.将此部分复制到一个名为的单独的Django模板中,gallery_content.html然后将该部分替换为具有特定ID gallery.html的空白<div>,例如
<div id="gallery-content"></div>
Run Code Online (Sandbox Code Playgroud)
您正在做的是创建#gallery-contentHTML的占位符,稍后将通过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>??????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
Javascript onclick代码 - 每当用户点击按钮元素时调用 - 都会做两件事:(1)抓取#page-numberinput元素的值,(2)gallerypages_content异步地将它发送到Django 视图,即没有普通的web浏览器页面加载,通过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)
# ... 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()
Run Code Online (Sandbox Code Playgroud)
这就是上面的代码:(1)将page参数(现在是一个字符串(即#page-number输入元素的原始字符串值))转换为Python整数; (2)不相同的计算之前得到itemsList和categories; (3)用于render_to_string呈现gallery_content.htmlHTML字符串而不是正常的Django HTTP响应; (4)使用Dajax API创建一个将HTML注入#gallery-contentdiv 的指令; (5)并且,作为视图的响应,以JSON格式返回这些指令.onclick处理程序中的Dajaxice调用实际上会接收这些指令并对它们进行操作(严格来说,这Dajax.process是执行此操作的回调),导致HTML显示.请注意,您需要装饰gallerypages_content用@dajaxice_register-帮助Dajaxice钩一切融合在一起.
我没有特别测试过这个,但它是基于我如何让Dajaxice/Dajax为我工作,我希望它适合你 - 或者至少让你开始!
| 归档时间: |
|
| 查看次数: |
2646 次 |
| 最近记录: |