回到顶部

CONTENTS

django 前后端不分离,多个模板有相同的数据渲染,用 inclusion_tag 少写代码

django 前后端不分离,多个页面有相同的数据显示,按照普通做法:

可以在每个 view 里面查询一次给到模板。

这种做法,代码重复量太高,修改时极不方便。为此找到 django 包含标签 功能可以解决 前端页面有相同数据显示而只写一次查询代码的方法。

django 的包含标签的功能,个人理解 是把 相同查询的数据块独立出来,做成一个页面,把页面包装成标签,在需要的页面引用标签。

1. 把 相同数据块的模板,写成一个单独的 模板页面

# joyoo\templates\friend_url_show.html

<div class="am-u-sm-12 am-u-md-4- am-u-lg-4">
    <h3>常用网站</h3>
    <p>
    <ul>
        {% for item in common_url %}
            <li><a href="{{ item.site_link }}">{{ item.site_name }}</a></li>
        {% endfor %}
    </ul>
    </p>
</div>


<div class="am-u-sm-12 am-u-md-4- am-u-lg-4">
    <h3>友情链接&nbsp;<a href="{% url "blog:friendUrlAdd" %}">+</a></h3>
    <p>
    <ul>
        {% for item in friends_url %}
            <li><a href="{{ item.site_link }}">{{ item.site_name }}</a></li>
        {% endfor %}
    </ul>
    </p>
</div>

2. 独立数据块,做成标签

# joyoo\blog\templatetags\my_tags.py (新建自己的 tags)

from django import template
from blog.models import FriendsURL
from django.core.cache import cache
from joyoo.settings import CACHE_TIMEOUT_ARTICLE  # 缓存时间


register = template.Library()


@register.inclusion_tag("friend_url_show.html")
def get_friends_url():
    """
    获取友情链接
    :return:
    """
    friends_url = cache.get("friends_url")
    if not friends_url:
        friends_url = FriendsURL.objects.filter(show_status=True).filter(category="1")
        cache.set("friends_url", friends_url, CACHE_TIMEOUT_ARTICLE)

    common_url = cache.get("common_url")
    if not common_url:
        common_url = FriendsURL.objects.filter(show_status=True).filter(category="2")
        cache.set("common_url", common_url, CACHE_TIMEOUT_ARTICLE)

    return {"friends_url": friends_url, "common_url": common_url}

3. 在需要模板页面引用自定义的标签

# joyoo\templates\lw-index-noslider.html

{# 模板抬头就引入 自定义标签库 my_tags #}
{% load my_tags %}


{# 在需要的地方引用 标签 #}
{% get_friends_url %}

 

^_^
请喝咖啡 ×

前一篇: django 如何通过各种网站的 文件验证
下一篇: 博客链接提交给百度和谷歌
captcha
带 * 是必填项