django——inclusion_tag(代码片段)

huang-yc huang-yc     2023-01-04     448

关键词:

inclusion_tag()

原型: django.template.Library.inclusion_tag() 

主要作用:通过渲染一个模板来显示一些数据

例如,Django的Admin界面使用自定义模板标签显示"添加/更改"表单页面底部的按钮。这些按钮看起来总是相同,但链接的目标却是根据正在编辑的对象而变化的。

这种类型的标签被称为"Inclusion 标签",属于自定义标签的一种。

项目实例:

在我的一个blog项目中,一个博主的主页面的左侧栏和查看博主某篇文章的页面的左栅栏的一样的。为了不用重复写同样的代码。且提高页面的扩展性。我的bbs的左侧栏就用了inclusion_tag来实现。

技术分享图片

技术分享图片

 

1.目录结构

技术分享图片

在项目blog这个app下面创建一个 templatetags 文夹。这个文件夹的名字必须是 templatetags 来命名的。然后在此文件夹下自定义一个 mytag.py 文件。

2. mytag.py:

这一个就是来处理不同数据的函数,返回的结果一致。

技术分享图片
from django import template
from django.db.models import Count
from blog import models

register = template.Library()


@register.inclusion_tag(classfication.html)
def get_calssfication_style(username):
    user = models.UserInfo.objects.filter(username=username).first()
    print(user.username)
    blog=user.blog
    nblog_id = user.blog_id
    print(nblog_id)

    cate_list = models.Category.objects.filter(blog_id=nblog_id).values("pk").annotate(c=Count("article__title")).values_list(
        "title", "c")
    print(cate_list)

    tag_list = models.Tag.objects.filter(blog_id=nblog_id).values("pk").annotate(c=Count("article")).values_list("title", "c")

    date_list = models.Article.objects.filter(user=user).extra(
        select="y_m_date": "date_format(create_time,‘%%Y/%%m‘)").values("y_m_date").annotate(
        c=Count("nid")).values_list("y_m_date", "c")

    return "blog": blog, "cate_list": cate_list, "date_list": date_list, "tag_list": tag_list,"username":username
View Code

3. classfication.html:

用来渲染mytag.py所返回的数据

技术分享图片
 <div>
    <div class="panel panel-warning">
                <div class="panel-heading">我的标签</div>
                <div class="panel-body">

                    % for tag in tag_list %
                         % if username %
#                        <p><a href= " username /tag/ tag.0 "> tag.0 ( tag.1 )</a></p>#
                        <p><a href= "% url ‘blog_info‘ username=username condition=‘tag‘ param=tag.0 %"> tag.0 ( tag.1 )</a></p>
                        % endif %
                    % endfor %

                </div>
            </div>

    <div class="panel panel-danger">
        <div class="panel-heading">随笔分类</div>
        <div class="panel-body">
            % for cate in cate_list %
                <p><a href="/ username /category/ cate.0 "> cate.0 ( cate.1 )</a></p>
            % endfor %
        </div>
    </div>

    <div class="panel panel-success">
        <div class="panel-heading">随笔归档</div>
        <div class="panel-body">
            % for date in date_list %
                <p><a href="/ username /archive/ date.0 "> date.0 ( date.1 )</a></p>
            % endfor %
        </div>
    </div>
 </div>
View Code

4. base.html:

这里我需要在 base.html 中引用上面的 classfication.html ,只需要在合适的地方加入以下两行代码:

 % load mytag %
 % left_panel username %

上面的代码中 username 是一个参数。

 

ps:目前我的这个项目已经部署到ECS,可以访问查看项目详情,欢迎留言!geek

 

django框架15(代码片段)

内容回顾-侧边栏制作inclusion_tag"""1.当一个页面的局部需要再多个页面使用并且还需要传参数自定义inclusion_tag步骤1.在应用下创建名字必须叫templatetags文件夹2.文件夹内创建任意名称的py文件3.py文件内先书写固定的两行代码fromdjang... 查看详情

django中的tags,母版和继承,组件,静态文件相关,自定义simpletag和自定义inclusion_tag(代码片段)

Tagsfor<ul>%foruserinuser_list%<li>user.name</li>%endfor%</ul>for循环可用的一些参数:VariableDescriptionforloop.counter当前循环的索引值(从1开始)forloop.counter0当前循环的索引值(从0开始)forloop.revcoun 查看详情

django-filter和simpletag,inclusion_tag的用法

filter的用法:#先引入templatefromdjangoimporttemplate#声明register,名字只能是registerregister=template.Library()#带名字的装饰器,调用的时候用起的名字如dsb@register.filter(name=‘dsb‘)defadd_sb(value,arg):return"_abc".format(value, 查看详情

django搭建个人博客平台6---前端templates模板index页(代码片段)

...态文件建议目录结构base.htmlindex首页自定义Navigation导航栏inclusion_tag自定义标签和控制器方法介绍inclusion_tag导航栏inclusion_tagindex.html后话Django搭建个人博客平台6—前端templates模板index页Django的te 查看详情

django模版语言的复用1.include标签--模版导入2.inclusion_tag自定义标签--模版导入3.母版(代码片段)

include标签--模版导入‘‘‘前提:项目中,往往会出现多个页面拥有一个或几个相同的页面版块,或是一个页面多个页面版块是相同的如何运用:可以将多个样式标签的集合进行封装,对外提供版块的名字(接口),在有该版块的... 查看详情

django模板层(变量分配过滤器标签继承和导入自定义过滤器标签及inclusion_tag(了解))(代码片段)

目录一、模板变量分配定义 在后端变量的值通过模板语法传到前端符号:主要与数据值相关%%:主要与逻辑相关模板语法注意点:1.针对需要加括号调用的名字django模板语法会自动加括号调用你只需要写名字就行2.模板语法的注释##... 查看详情

django-权限信息自定义标签(代码片段)

自定义权限标签:importrefromdjango.templateimportLibraryfromdjango.confimportsettingsregister=Library()@register.inclusion_tag("rbac/xxxxx.html")defmenu_html(request):"""去Session中获取菜单相关信息,匹配当前URL,生成菜单:paramre 查看详情

inclusion_tag的运用(代码片段)

...容需要通过传参数才能正常显示,那么我们可以优先考虑inclusion_tag模块自定义标签过滤器inclusion_tag三步骤:1.在应用下必须新建一个名叫templatetags的文件夹2.在文件夹下新建任意名称的py文件比如rbac.py3.在该py文件内必须先写两... 查看详情

63-django-cbv刨析模板层之模板语法传值过滤器标签自定义过滤器标签inclusion_tag模板继承模板导入

...模版语法之过滤器模版语法之标签自定义过滤器、标签及inclusion_tag模版的继承模版的导入FBV与CBV"""视图函数即可以是函数也可以是类"""#FBVdefindex(request):returnHttpResponse(‘OK‘)#CBVfromdjango.viewsimportView"""只要是处理业务逻辑的视图函... 查看详情

django模板层(代码片段)

...板层(模板语法)1.过滤器2.标签3.自定义标签,过滤器,inclusion_tag4.模板的继承5.模板的导入后端向前端传递数据有两种方式:区别:第一种传值方式是以字典的传值方式,精确地去传某一个对象,第二种传值方式是把函数中所... 查看详情

django框架五(代码片段)

...模版语法之过滤器模版语法之标签自定义过滤器、标签及inclusion_tag模版的继承模版的导入CBV源码剖析#突破口在urls.pyurl(r‘^login/‘,views.MyLogin.as_view())#url(r‘^login/‘,views.view)FBV一模一样#CBV与FBV在路由匹配上本质是一样的 查看详情

django---进阶4(代码片段)

...(过滤器只能最多有两个参数)标签自定义过滤器、标签、inclusion_tag模版的继承模版的导入作业CBV源码剖析#你自己不要修改源码除了bug很难找#突破口在urls.pyurl(r‘^login/‘,views.MyLogin.as_view())#url(r‘^login/‘,views.view)FBV一模一样#CBV与... 查看详情

inclusion_tag重复页面加载显示模板(代码片段)

...将数据return回来,第五步:给这个视图函数加上@register.inclusion_tag(filename=‘left_menu.html‘),以指定html文件将数据传入。在需要用到自定义inclusion_tag的html文件中引入,引入固定规则为:通过使用%loadpy文件名%%对应html文件名py文件... 查看详情

django自定义模板标签和过滤器(代码片段)

inclusion_tag()在app中新建一个templatetags包(名字固定,不能变,只能是这个),和views.py、models.py等文件处于同一级别目录下。这是一个包!不要忘记创建__init__.py文件以使得该目录可以作为Python的包1.首先,编写Python函数,templatetag... 查看详情

django模板的导入

...中直接导入即可语法:%include‘版块页面的路径‘‘‘%四inclusion_tag自定义标签--模板导入前提:多个页面有一个相似的页面版块如何运用:1.先封装相似的页面标签结果,为数据不同页面标签个数不同的地方采用Django模板语言写活(数... 查看详情

python从ramusus分发:https://gist.github.com/ramusus/4343464并更改为在django1.6中工作,仅针对onetoone关系进行了更改测试(o(代码片

查看详情

inclusion_tag组件(代码片段)

%foritemindata%<li%ifitem.class%class="item.class"%endif%><ahref="item.url">item.name</a></li>%endfor%menu_list.html<liclass="dropdownactive"><ahref="#"class="activedropdown-toggle"data-toggle="dropdown"role="button"aria-haspopup="true"aria-expanded="false">项目... 查看详情

python网站开发必备-django模板自定义标签(代码片段)

...ry()----->register名字一定不能变 -写装饰器(标签,过滤器,inclusion_tag) -@inclusion_tag('模板路径',name='重命名') -defmy_in():不写,写多个,不写不传,写多个,按空格来传参 - 一堆逻辑处理,查数据库 - ret=Book.obje 查看详情