一个django应用程序,提供{%include@uajax%}模板标记

django-include-by-ajax的Python项目详细描述


提供{% include_by_ajax %}模板标记的django应用程序

问题

起始页通常显示从不同部分聚合的数据。如果关系和过滤器很复杂或者有很多图像,则呈现开始页可能需要一些时间。性能的最佳实践是尽快将内容显示在折叠的上方(在可见的视区中),然后使用javascript动态加载页面的其余部分。

解决方案

此应用程序允许您将重页组织为包含在主页模板中的部分。默认的include可以通过{% include template_name %}模板标记完成,并立即呈现。我们将引入一个新的模板标记{% include_by_ajax template_name %},它最初将呈现一个空的占位符,但随后将通过ajax动态加载内容。

{% include_by_ajax template_name %}包含的模板将获取通常传递给普通{% include template_name %}模板标记的所有上下文。

您还可以传递一个占位符模板,该模板将在加载内容之前显示。为此,{% include_by_ajax template_name placeholder_template_name=placeholder_template_name %}

实施细节

当您使用{% include_by_ajax template_name %}时,页面将被加载和呈现两次:一次加载空占位符<section class="ajax-placeholder"></section>。然后它再次由ajax加载,占位符将获得呈现的数据。当第二次加载完成时,javascript用它们的内容替换所有占位符。

ajax包含的模板可以包含加载时将执行的<style><script>标记。

最后,为document触发'include_by_ajax_all_loaded'事件,以便可以进一步初始化javascript函数。

注意事项

{% include_by_ajax template_name %}包含的模板应始终将内容包装成单个html标记,如<div><span><section><article>或其他。

要求

该应用程序与服务器上的django 1.8+和前端的jquery 3.x一起工作。

安装和配置

  1. 将库安装到虚拟环境:

    (venv)$ pip install django-include-by-ajax
    
  2. 'include_by_ajax'添加到INSTALLED_APPS

  3. 在基本模板中,链接到jquery和include_by_ajax.js

    {% load staticfiles %}
    <scriptsrc="https://code.jquery.com/jquery-3.4.0.min.js"crossorigin="anonymous"></script><scriptsrc="{% static 'include_by_ajax/js/include_by_ajax.min.js' %}"defer></script>
  4. 在页面模板中,为页面可见区域下方的所有内容加载并使用模板标记。

    {% extends "base.html" %}
    {% load include_by_ajax_tags %}
    
    {% block content %}
        <h1>My Website</h1>
        {% include "slideshows/includes/start_page_slideshow.html" %}
        <!-- the fold -->
        {% include_by_ajax "blog/includes/latest_blog_posts.html" %}
        {% include_by_ajax "news/includes/latest_news.html" %}
        {% include_by_ajax "gallery/includes/latest_pictures.html" placeholder_template_name="utils/loading.html" %}
    {% endblock %}
    
    {% block js %}
        <script>$(document).on('include_by_ajax_all_loaded',function(){console.log('Now all placeholders are loaded and replaced with content');})</script>
    {% endblock %}    
    
  5. 在一杯新鲜的薄荷茶中享受快速显示的网页。

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

推荐PyPI第三方库


热门话题
java如何将cassandra中的行数据转换为与列相关的嵌套json   java如何使用jcr XPath在jcr:content/@jcr:data中搜索?   java在使用openCV进行安卓开发时如何利用手机的广角镜头   java解析扩展了接口,结束了一个潜在的无限循环   位置服务的@Override方法中存在java Android应用程序错误   java本地线程的用途和需求是什么   具有左右子访问的java节点树遍历   java验证JsonWebToken签名   JUL日志处理程序中的java日志记录   嵌入式Java读取给定时间段的串行数据。   java有没有办法从多个URL获取多个图像?   java线程通过等待intent阻止自己发送intent   java Spring MVC解析多部分内容请求   java JPA/Hibernate静态元模型属性未填充NullPointerException   java格式错误的字符(需要引号,得到I)~正在处理   java为什么PrintWriter对象抛出FileNotFoundException?   java Neo4j未正确保存标签   java IE不加载图像