如何从我的 Django 模板中调用 Dajax / Dajaxice 函数

Posted

技术标签:

【中文标题】如何从我的 Django 模板中调用 Dajax / Dajaxice 函数【英文标题】:How do I call Dajax / Dajaxice functions from my Django template 【发布时间】:2012-04-20 16:07:54 【问题描述】:

我正在编写一个简单的 Django 应用程序,并希望使用 Dajax / Dajaxice 添加 ajax 分页。我已经开始尝试从 Dajax 网站 (http://dajaxproject.com/pagination/) 实现简单的分页示例 - 但没有设法让它工作。每当我按下“下一步”按钮时,我都会收到以下 js 错误:

Uncaught TypeError: Cannot call method 'pagination' of undefined

我的 Django 项目名为“DoSomething” - 它包含一个名为“core”的应用程序。

我已按照所有说明在此处安装 Dajaxice:https://github.com/jorgebastida/django-dajaxice/wiki/installation

我在“core”目录中有一个名为“ajax.py”的python文件,其中包含以下代码:

from views import get_pagination_page
from dajax.core.Dajax import Dajax
from django.template.loader import render_to_string
from dajaxice.decorators import dajaxice_register
from django.utils import simplejson

@dajaxice_register
def pagination(request, p):
    try:
        page = int(p)
    except:
        page = 1
    items = get_pagination_page(page)
    render = render_to_string('posts_paginator.html',  'items': items )

    dajax = Dajax()
    dajax.assign('#pagination','innerHTML',render)
    return dajax.json()

我的views.py文件包含以下方法:

def index(request):
    posts = Post.objects.order_by('id').reverse()
    items = get_pagination_page(1)
    return render_to_response('index.html', locals(), context_instance=RequestContext(request))

def get_pagination_page(page=1):
    from django.core.paginator import Paginator, InvalidPage, EmptyPage
    from django.template.loader import render_to_string
    items = Post.objects.order_by('id').reverse()
    paginator = Paginator(items, 10)
    try:
        page = int(page)
    except ValueError:
        page = 1
    try:
        items = paginator.page(page)
    except (EmptyPage, InvalidPage):
        items = paginator.page(paginator.num_pages)
    return items

我的索引模板包含以下内容:

<div id="pagination">
    % include "posts_paginator.html" %
</div>

我的posts_paginator.html 模板包含以下链接,用于触发分页方法:

% for i in items.object_list %
     i <br>
% endfor %
% if items.has_next %
    <a href="#" onclick="Dajaxice.core.pagination(Dajax.process,'p': items.next_page_number )">next</a>
% endif %

我的问题是,在 onClick 值中,我应该如何引用分页方法(来自我的 ajax.py 文件)。我找不到任何可以解释的东西 - 我已经尝试了我能想到的所有项目名称/应用程序名称的组合!

谢谢! :)

【问题讨论】:

【参考方案1】:

至少在我的情况下,我必须附加项目名称以及 app_label。

Dajaxice.MyProject.core.my_dajax_method(Dajax.process, 'form' : data);

【讨论】:

注意:***.com/questions/26219391/dajax-not-working/…

以上是关于如何从我的 Django 模板中调用 Dajax / Dajaxice 函数的主要内容,如果未能解决你的问题,请参考以下文章

在 django 中使用 dajax

如何从 python 代码中调用 django 模板标签?

dajax成功后如何调用函数?

如何从 Django 中的表单调用 Python 函数?

Django AJAX。 dajax 是不是仍然可以或更好地立即迁移到 jQuery(2012 年复兴)?

Django:如何从模板中识别调用视图?