模板继承与导入

模板继承的场景一:模版继承1)继承使用步骤1:母板里写入block,就可以被继承,content是名称步骤2:子页面通过extends指定继承那个模板2)如果子页面有自己的css,js怎么

大家好,又见面了,我是你们的朋友全栈君。

模板继承的场景

情况1:通常写页面都有个模板用来框定头部LOGO页面,左侧导航菜单,只有右部的内容不同。如果不使用模板就大量重复工作。

    特别如果头部或者左侧导航需要修改或者添加,所有页面都需要修改。django 通过模板继承解决。

情况2:一个页面如果内容特别多,不可能都一起写同一个页面。比如京东首页内容非常多。如何解决了?django通过include导入其他页面。

一:模版继承

  1)继承使用

    步骤1:母板里写入block,就可以被继承,content是名称 

    {% block title %}
    {% endblock%}

    {% block “content“ %}
    {% endblock%}

    步骤2:子页面通过extends指定继承那个模板

    {% extends 'master.html'%} #继承那个模板

    {% block “content“ %} 这个地方就是替换模板block “content“
        <ul>
            {% for i in u%}
                <li>{{i}}</li> 
            {%endfor%}
    {% endblock%}

    2)如果子页面有自己的css,js 怎么用了?
  A)如果是在子页面写CSS和JS,CSS就不是在头部了,而JS也不是在<body>之前,假如要引用jquery,子页面写的JS会在jquery引用前面,就会不生效

  B)继承CSS与JS都是共有的。
        

  解决方法:

  在模板里css 和js位置在写个block块。然后在block里引入,在这个block写自己的js和css
        注:block和顺序没有关系

二:模板引入使用

  3)一个页面只能继承一个模板,如何解决了?如何使用多个模板,或者引入其他页面

    <% include “a.html” %> 可以引用多次

  4)模板,include,子页面怎么渲染?
        先把自己渲染成字符串,在拿模板和include渲染,所以不存在渲染问题(可以把子页面继承include当做一个整页面)

三:示例

    #url.py
        url(r'^tpl1$',views.tpl1),
        url(r'^tpl2$',views.tpl2),
        url(r'^tpl3$',views.tpl3),

    #views.py

        def tpl1(request):
            u=[1,2,3]
            return render(request,"tp1.html",{"u":u})
        
        def tpl2(request):
            name="alex"
            return render(request,"tp2.html",{"name":name})
        
        def tpl3(request):
            status="已修改"
            return render(request,"tp3.html",{"status":status})

    #模块:master.html
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>
                {% block title %}{% endblock %} <!--这里用来设置标题-->
            </title>
            <link rel="stylesheet" href="/static/common.css">
        
            {% block css %}<!--这里用来设置子页面自己的css-->
            {% endblock %}
        </head>
        <body>
            {% block content %}<!--这里用来设置子页面自己的内容-->
            {% endblock %}
            <script src="/static/js/jquery-1.12.4.js"></script>
          <script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
            {% block js %}<!--这里用来设置子页面自己的js-->
            {% endblock %}
        </body>
        </html>

    #子页面:tp1.html
        {% extends "master.html" %} <!-- 继承那个模板-->

        {% block title %}
            用户管理
        {% endblock %}
        
        {% block css %}
            <style>
                body{
                    background-color: aqua;
                }
            </style>
        {% endblock %}
        
        {% block content %}
            <h1>用户管理</h1>
            <ul>
                {% for i in u %}
                    <li>{{ i }}</li>
                {% endfor %}
            </ul>
        {% endblock %}
    #子页面:tp2.html
        {% extends "master.html" %}
        
        {% block content %}
            <h1>修改密码{{ name }}</h1>
            {% include "tp3.html" %} <!-- 引入其他页面-->
        {% endblock %}

    #include页面:tp3.html
    <div>
        <input type="text">
        <input type="button" value="++">
    </div>

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124460.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mybatis插入数据(无则插入有则更新)以及字段自增

    mybatis插入数据(无则插入有则更新)以及字段自增

    2021年8月3日
    83
  • Java实现静态代理[通俗易懂]

    Java实现静态代理[通俗易懂]使用静态代理时需要让目标对象和代理对象一起实现相同的接口或者继承相同的父类。这样做的目的就是为了通过调用代理对象中和目标对象相同的方法来实现调用目标对象的方法,从而达到代理的效果。第一步定义接口publicinterfaceIStatictProxy{voidprint();}第二步实现接口(目标对象)@Slf4jpublicclassTargetImplimplementsIStatictProxy{@Overridepublic

    2022年10月16日
    6
  • 读书笔记摘抄读后感大全_谈美读书笔记摘抄感悟

    读书笔记摘抄读后感大全_谈美读书笔记摘抄感悟推荐序1 什么是小米跟苹果正面撕的底气?认知盈余是所有互联网商业模式的一大基础理论,我用一句话总结为:下班时间产生的革命性力量。小米模式的本质,用雷军的话说,就是:硬件+互联网+新零售。品牌的竞争VS流量的竞争乔布斯认为,品牌仅次于技术。他有一个品牌秘方:革命性技术与营销的结合才是苹果成功的关键。苹果能卖出这么高的溢价,最重要一招就是品牌效应,而且是爆品级的品牌效应。我称之为:爆品+品牌…

    2025年8月28日
    6
  • eclipse乱码问题如何解决_虚拟机乱码怎么解决办法

    eclipse乱码问题如何解决_虚拟机乱码怎么解决办法 1、eclipse的编码不能改成GBK解决办法:gedit/var/lib/locales/supported.d/zh加入这一行:zh_CN.GBKGBK保存之后再启动eclipse,就可以把编码改成GBK了,不过还是要手工输入,不能选。还有另一种方法,可以看这里:http://thinkbase.net/w/main/Wiki?2006-05-11+%E4%BB%8E%E4

    2025年5月25日
    5
  • RenderControl获取控件输出的HTML

    RenderControl获取控件输出的HTML之前写过一篇文章,通过实现ICallbackEventHandler接口,实现其两个方法。RaiseCallbackEvent实现回调处理,GetCallbackResult实现将处理产生的结果输出到客户端。为了实现页面不刷新,我们在GetCallbackResult方法中可以将前台的控件html通过RenderControl方法获取,并Return到客户端…

    2022年7月20日
    19
  • java中的策略模式(策略模式java)

    前言当代码中出现多重if-else语句或者switch语句时。弊端之一:如果这样的代码出现在多处,那么一旦出现需求变更,就需要把所有地方的if-else或者switch代码进行更改,要是遗漏了某一处,那么程序就会出错。弊端之二:代码逻辑难以理解。卫语句卫语句的使用,并不能改变前言说的弊端:一旦需求更改,需要修改所有使用更改需求的if-else代码块。不过使用卫语句可以让自己或者代码…

    2022年4月18日
    57

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号