当前位置: 首页 > 面试题库 >

Django和Ajax-我该怎么办?

娄建义
2023-03-14
问题内容

我的网站几乎完成了,除了最后一部分,我需要使图库页面支持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:

  1. 根据文档安装Dajaxice和Dajax。文档似乎没有提及它,但是您也可以使用pip,即
    pip install django-dajaxice
    

    pip install django-dajax

获取库。无论如何,请确保遵循doc说明安装Django应用,并将必需的Javascript库加载到中gallery.html。(请注意,您需要安装jQuery或类似的JS框架才能使Dajax正常工作。)

  1. 在中gallery.html,将itemscategories呈现为HTML 的部分隔离。将此部分复制到一个单独的Django模板中,例如,gallery_content.html然后用特定ID gallery.html的空白替换该部分<div>,例如
    <div id="gallery-content"></div>
    

您正在做的是#gallery-content为HTML 创建一个占位符,稍后将通过Dajaxice调用为每个页面生成HTML。

  1. 现在,在中的其他位置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应用的名称。

  1. 最后,您需要创建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()

这就是上面的代码所做的:(1)将page参数(现在是字符串)(即#page- number输入元素的原始字符串值)转换为Python整数;(2)进行与之前相同的计算,得到itemsListcategories;
(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为我工作,我希望它对您有用-至少可以让您入门!



 类似资料:
  • 问题描述 我输入sqlite3 -version,显示版本变化,我安装项目依赖sqlite-devel 和python-devel没有更新,Python -V版本未变 问题出现的环境背景及自己尝试过哪些方法 我是初学者,在学习过程中怕版本不对,于是我就选择文章指定版本进行安装,尝试过的办法就是在网上找安装项目依赖命令,找了几个试都未成功 相关代码 粘贴代码文本(请勿用截图) ··· yum ins

  • 问题内容: 我有一个树结构,其中每个都有一个父级和一个。每个节点都有一个,我想在其中选择进行查询,即该节点和所有父节点的标题。如何编写此查询? 单个标题的查询就是这样,但是就像我说的那样,我希望它扩展到整个父母分支。 干杯 尼克 问题答案: 您不能使用HQL进行递归查询。看到这个。如前所述,它甚至不是标准的SQL。您有两种选择: 编写特定于供应商的递归本机SQL查询 进行多个查询。例如: 我肯定会

  • 一位同事与我分享了这段代码: 在gcc.godbolt.org上运行 GCC打印,Clang打印,MSVC抱怨缺少模板参数。 哪个编译器是正确的?

  • 问题内容: 当我尝试启动我们的Java服务器时,出现此错误:java.lang.ClassNotFoundException:com.mysql.jdbc.Driver 但是我在脚本所在的文件夹中有mysql-connector-java-5.1.22-bin.jar,并在运行脚本时使用它: 但是仍然得到这个。该怎么办?我正在使用CentOS服务器。 问题答案: 在中的 MANIFEST.MF 文

  • 问题内容: 我这里有一个尺寸为2156x1728的黑白png文件,我想使用AffineTransform旋转90度。生成的图像比例不正确。这是一些示例代码(假设我已将png文件成功加载到BufferedImage中): 输出如下: 输入宽度:2156 输入高度:1728 结果宽度:1942年 身高:1942 旋转如何返回如此完全无关的尺寸? 问题答案: 我不是专业人士,但是为什么不创建一个正确大小

  • 问题内容: 我有一个applet,我必须向Web应用程序发送一个请求,以从数据库中的服务器获取数据。我正在处理对象,服务器用对象响应我非常有用! 小程序如何与服务器通信? 我认为Web服务方法,RMI和…让我感到高兴,但是哪种方法最可靠? 问题答案: 只要只有您的applet与服务器通信,就可以使用序列化对象。您只需要在applet jar和服务器上维护相同版本的对象类。它不是最开放或可扩展的方法