模板语言之include_tag使用注意事项

 

include_tag多用于返回html代码片段(多用于母版构建当中)

首先要在django项目中的app里面新建一个templatetags的文件包(里面放置自定义的tags文件)

然后在自己定义的tags里面要导入template并且注册(register)要实例化一个Library()对象

注册到自己定义的方法上时要加include_tag("对应的html文件")

from django import template
from appbbs import models
from django.db.models import Count

register = template.Library()


@register.inclusion_tag("left_menu.html")
def get_left_menu(username):
    user = models.UserInfo.objects.filter(username=username).first()
    blog = user.blog  # 获取用户的blog
    # 查询文章分类及对应的文章数
    category_list = models.Category.objects.filter(blog=blog).annotate(c=Count("article")).values("title", "c")
    # 查看文章标签及文章数
    tag_list = models.Tag.objects.filter(blog=blog).annotate(c=Count("article")).values("title", "c")
    # 按日期归档
    archive_list = models.Article.objects.filter(user=user).extra(
        select={"archive_ym": "date_format(create_time,'%%Y-%%m')"}
    ).values("archive_ym").annotate(c=Count("nid")).values("archive_ym", "c")

    return {
        "category_list": category_list,
        "tag_list": tag_list,
        "archive_list": archive_list
    }

自定义的html文件就可以使用传过来的数据了

<div class="panel panel-primary">
    <div class="page-header" style="text-align: center;font-size: 20px">文章分类</div>
    <div class="panel-body" style="text-align: center;font-size: 18px">
        {% for category in category_list %}
            <p>{{ category.title }}({{ category.c }})</p>
        {% endfor %}
    </div>
</div>
<div class="panel panel-warning">
    <div class="page-header" style="text-align: center;font-size: 20px">文章标签</div>
    <div class="panel-body" style="text-align: center;font-size: 18px">
        {% for tag in tag_list %}
            <p>{{ tag.title }}({{ tag.c }})</p>
        {% endfor %}
    </div>
</div>
<div class="panel panel-info">
    <div class="page-header" style="text-align: center;font-size: 20px">日期归档</div>
    <div class="panel-body" style="text-align: center;font-size: 18px">
        {% for archive in archive_list %}
            <p>{{ archive.archive_ym }}({{ archive.c }})</p>
        {% endfor %}
    </div>
</div>

在模板中进行引用

<div class="col-md-3">
        {% load my_tag %}<!-- 将自定义的tags标签加载进来 -->
        {% get_left_menu username %} <!-- 调用自定义的tag标签并传递参数 -->
    </div>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值