jquery pjax的基于模板块的django助手。
DjPj的Python项目详细描述
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_block或title_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_block和pjax_template装饰器。Read more about that on GitHub.
pjax是如何工作的?
通常,单击链接时,浏览器必须设置 scratch:html必须被解析,脚本必须被编译和执行, 解释并应用样式表。这是很多工作,当你 在同一个网站的不同页面之间浏览,大部分工作是 复制的。就像给每个煎饼加热一个新煎锅。
当用户单击启用pjax的网站,服务器只发送 显示新页面需要更改的内容。新鲜的洋娃娃 内容会在页面中放置到位,浏览器不必全部执行 与整页加载相关联的工作。为了完成这个把戏,我们操纵 使后退和前进按钮正常工作的浏览器历史记录。
python和django的兼容性
这个包在django 1.4+和python 2.6、2.7、3.3+以及pypy中进行了测试。
测试
测试是用鼻子进行的。要安装:
pip install nose
运行测试:
nosetests tests.py