一个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一起工作。
安装和配置
将库安装到虚拟环境:
(venv)$ pip install django-include-by-ajax
将
'include_by_ajax'
添加到INSTALLED_APPS
。在基本模板中,链接到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>
在页面模板中,为页面可见区域下方的所有内容加载并使用模板标记。
{% 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 %}
在一杯新鲜的薄荷茶中享受快速显示的网页。