jquery pjax的基于模板块的django助手。

DjPj的Python项目详细描述


https://img.shields.io/pypi/v/djpj.svghttps://travis-ci.org/AlexHill/djpj.svg?branch=masterhttps://coveralls.io/repos/github/AlexHill/djpj/badge.svg?branch=master

DJPJ概述(以前的DJANGO PJAX块)

DJPJ是一种简单、灵活的方法,为您的Django项目添加PJAX支持。 为网站用户提供更快的浏览体验。

如果您不知道pjax是什么,请在下面read about how it works。在一个 简单地说,它通过加载使您的网站页面之间的导航更快 只是页面中需要更改的部分,而不是整个内容。 这是一种公认的技术;如果您在github上阅读此技术,则 可能是通过pjax加载的。

简而言之,启用djpj的网站将使用 所选单个模板块的内容。它不需要 对视图的更改,这意味着很容易将pjax支持添加到 第三方django应用程序。

开始

pjax需要前端(运行在 你的访问者的网络浏览器)和你的django后端。

一。使用jquery pjax

设置前端

前端由jquery pjax库处理,因此首先,请阅读 how to use jQuery-PJAX然后选择其中一种技术。

2.在服务器上安装DJPJ

首先,确保您正在处理的视图返回TemplateResponse。DJPJ作品 通过更改模板的呈现方式,因此它不能与 预渲染HttpResponse

从pypi安装djpj:

> pip install djpj

三。开始使用pjax-基本用法示例

假设您有一个模板blog_post.html,它如下所示:

<head>
    <title>{{ blog_post_title }}</title>
</head>

...

<div id="blog_post">
{% block blog_post %}
    ...
{% endblock %}
</article>

使用 “博客文章”模板块:

@pjax_block("blog_post")
def blog_post_view(request, ...)
    ...
    return TemplateResponse(request, "blog_post.html", context)

如果希望pjax正确地更新页面的标题,请包括 title_blocktitle_variable参数到pjax_block

@pjax_block("blog_post", title_variable="blog_post_title")
def blog_post_view(request, ...)
    ...

PJAX术语中的“container”是包含内容的HTML元素 你想换掉。在上面的示例中,块的名称相同 作为容器元素的id-它们都是“blog\u post”。在这些情况下 你可以完全省略第一个参数,DJPJ会寻找一个块 其名称与容器的ID相同:

@pjax_block(title_variable-"blog_post_title")
def blog_post_view(request, ...)
    ...

使用djpj的中间件启用pjax而不修改视图

如果您的站点使用无法修改的第三方视图,例如视图 由电子商务或CMS包定义-您可以使用DJPJ的中间件 直接装饰视图。当您有许多 您想要pjaxify的视图,它们都共享一个公共的url模式。

它看起来是这样的:

# DjangoPJAXMiddleware should appear last in MIDDLEWARE_CLASSES
MIDDLEWARE_CLASSES = (
    ...,
    "djpj.middleware.DjangoPJAXMiddleware",
)

DJPJ_PJAX_URLS = (
    ('^/blog/', '@pjax_block("blog_post", title_variable="blog_post_title")'),
)

DJPJ_PJAX_URLS中的每个条目都是一个2元组,第一个元素是正则的 与要pjaxify的url匹配的表达式,第二个是字符串 包含定义decorator的python代码,就像在 视图.py。

对pjax请求使用不同的模板

您还可以为pjax请求使用特定的模板,而不是返回 特定区块。为此,使用pjax_templatedecorator并传递 pjax模板的名称作为第一个参数:

from djpj import pjax_template

@pjax_template("pjax_template.html")
def my_view(request)
    context = {"post_title": "My First Blog Post", ...}
    return TemplateResponse(request, "template.html", context)

如果希望标题为 在用户的Web浏览器中更新。

自定义DJPJ的行为

您可以通过提供自己的块和模板来定制DJPJ如何选择块和模板 函数指向pjax_blockpjax_template装饰器。Read more about that on GitHub.

pjax是如何工作的?

通常,单击链接时,浏览器必须设置 scratch:html必须被解析,脚本必须被编译和执行, 解释并应用样式表。这是很多工作,当你 在同一个网站的不同页面之间浏览,大部分工作是 复制的。就像给每个煎饼加热一个新煎锅。

当用户单击启用pjax的网站,服务器只发送 显示新页面需要更改的内容。新鲜的洋娃娃 内容会在页面中放置到位,浏览器不必全部执行 与整页加载相关联的工作。为了完成这个把戏,我们操纵 使后退和前进按钮正常工作的浏览器历史记录。

致谢

DJPJ依赖于defunkt的jquery-pjax-规范 客户端pjax库和github使用的同一个库。

DJPJ最初改编自Jacob Kaplan Moss'Django-PJAX

python和django的兼容性

这个包在django 1.4+和python 2.6、2.7、3.3+以及pypy中进行了测试。

测试

测试是用鼻子进行的。要安装:

pip install nose

运行测试:

nosetests tests.py

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
ws-consumer服务地址中的java动态属性   java如何比较整数列表,然后按升序排序?   javascript我正在使用java脚本调用一个函数,但它没有调用代码下面的方法,也没有调用secretitnames()函数   在文本窗格中多次使用Java insertIcon图标   JavaMSAL安卓。AuthenticationActivity完成,但用于身份验证请求的线程池线程仍处于等待状态   if语句中的java多范围比较   java toString()表示输出   java如何在jcstrest测试中生成指令重新排序   java我怎样才能运行它?   web应用程序中使用Hibernate和Spring的java问题   如何将字符串数据写入Java文本文件   如何在java命令提示符下运行已签名的jar文件?   java从我的菜单调用RCP应用程序   java如何等待Canvas/GraphicsContext完成任务,然后再继续执行代码块?