django 前后端不分离,多个模板有相同的数据渲染,用 inclusion_tag 少写代码
2023-06-13 09:18:39 时间
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>友情链接 <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
- app 目录下新建 templatetags 目录,包含 __init__.py 文件
- 在 templatetags 下新建自己的 my_tags.py,py 文件名模板引入时用到
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()
# friend_url_show.html 数据块模板
@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,就是那个 py 文件名称 #}
{% load my_tags %}
{# 在需要的地方引用 标签,就是 my_tags.py 里面的函数名称 #}
{% get_friends_url %}
相关文章
- Python进阶28-Django 模板层(Jinja2)
- Django模板
- Django(75)django-rest-framework-simplejwt「建议收藏」
- Django(29)模板变量「建议收藏」
- Django(23)Django限制请求装饰器
- Django(17)orm查询操作[通俗易懂]
- django debug_怎么调试debug
- Django 开发模板与视图
- django 模板获取 for 循环前 N 条数据
- 在 django generic.DetailView 里设置缓存(重写 get_object )
- python-Django-Django 模板引擎(一)
- python-Django 高级特性-Django 异步任务(一)
- Django REST Framework-视图集(四)
- Django加载静态网页模板详解程序员
- stark组件之注册【模仿Django的admin】详解编程语言
- Django的模板语言介绍详解编程语言
- Django基础学习五_引入静态文件详解编程语言