精华内容
下载资源
问答
  • 各位大神看看,这是为啥啊,python的语言,求大神看下什么问题 基本环境是x86 python3.7.6 [img=https://img-bbs.csdn.net/upload/201912/29/1577588548_738374.jpg][/img]
  • 它的语法如下:语法array parse_url(string $url,int $component)参数详解参数名参数说明$url要解析的 URL,无效字符将使用 _ 来替换。$component指定 PHP_URL_SCHEME、 PHP_URL_HOST、 PHP_URL...

    php parse_url()函数的作用?

    php 中 parse_url()函数是解析 URL,并返回url的组成部分。它的语法如下:

    语法array parse_url(string $url,int $component)

    参数详解参数名参数说明

    $url要解析的 URL,无效字符将使用 _ 来替换。

    $component指定 PHP_URL_SCHEME、 PHP_URL_HOST、 PHP_URL_PORT、 PHP_URL_USER、 PHP_URL_PASS、 PHP_URL_PATH、 PHP_URL_QUERY 或 PHP_URL_FRAGMENT 的其中一个来获取 URL 中指定的部分的 string。 (除了指定为 PHP_URL_PORT 后,将返回一个 integer 的值)。

    ps :本函数解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分。

    本函数不是用来验证给定 URL 的合法性的,只是将其分解为下面列出的部分。不完整的 URL 也被接受,parse_url()会尝试尽量正确地将其解析。

    返回值

    对严重不合格的 URL,parse_url() 可能会返回 FALSE。

    如果省略了 component 参数,将返回一个关联数组 array,在目前至少会有一个元素在该数组中。数组中可能的键有以下几种:scheme - 如 http

    host

    port

    user

    pass

    path

    query - 在问号 ? 之后

    fragment - 在散列符号 # 之后

    如果指定了 component 参数, parse_url() 返回一个 string (或在指定为 PHP_URL_PORT 时返回一个 integer)而不是array。如果 URL 中指定的组成部分不存在,将会返回 NULL。

    实例<?php

    $url = "http://www.php.cn:8080/index.php?name=wxp&id=2";

    $parts = parse_url($url);

    print_r($parts);

    ?>

    代码运行结果:

    f3dde32984844242912b8543ba30f6a3.png

    再看一个复杂一点的实例:<?php

    $url = 'http://hello:manong@jiaochen/blog?name=wxp#student';

    print_r(parse_url($url));

    echo "
    ";

    echo parse_url($url, PHP_URL_PATH);

    ?>

    代码运行结果:

    64bae03ddf43c3349200db679682247d.png

    从这个代码可以看出,我们可以设置第二个参数来获取URL中的各个部分。第二个参数的值可以为:PHP_URL_SCHEME

    PHP_URL_HOST

    PHP_URL_PORT

    PHP_URL_USER

    PHP_URL_PASS

    PHP_URL_PATH

    PHP_URL_QUERY

    PHP_URL_FRAGMENT

    【相关文章推荐】:

    展开全文
  • <c:url> 操作的语法

    2007-10-23 09:56:46
    操作的语法 ... 生成 URL 作为 HTML 标记的属性值 index page 生成带请求参数的 URL 注:searchTerm 事先定义好值。 value 属性用来指定基本 URL,然后在必要时标记对其进行...
    <c:url> 操作的语法
    <c:url value="expression" context="expression" var="name" scope="scope">
    <c:param name="expression" value="expression"/>
    <c:param name="expression" value="expression"/>
    ...
    </c:url>


    生成 URL 作为 HTML 标记的属性值
    <a href="<c:url value=index.jsp'/>">index page</a>


    生成带请求参数的 URL
    <c:url value="index.jsp">
    <c:param name="keyword" value="${searchTerm}"/>
    <c:param name="month" value="02/2003"/>
    </c:url>

    注:searchTerm 事先定义好值。
    value 属性用来指定基本 URL,然后在必要时标记对其进行转换。如果这个基本 URL 以一个斜杠开始,那么会在它前面加上 servlet 的上下文名称。可以使用 context 属性提供显式的上下文名称。如果省略该属性,那么就使用当前 servlet 上下文的名称。这一点特别有用,因为 servlet 上下文名称是在部署期间而不是开发期间决定的。(如果这个基本 URL 不是以斜杠开始的,那么就认为它是一个相对 URL,这时就不必添加上下文名称。)
    展开全文
  • 使用Django创建网页的过程通常分三个步骤:定义URL、编写视图函数和编写模板。 每个URL都被映射到特定的视图-视图函数获取处理网页信息的数据。视图通常需要一个模板,后者生成浏览器能理解的网页。 映射URL 通过...

    创建网页

    使用Django创建网页的过程通常分三个步骤:定义URL、编写视图函数和编写模板。
    每个URL都被映射到特定的视图-视图函数获取处理网页信息的数据。视图通常需要一个模板,后者生成浏览器能理解的网页。

    映射URL

    通过浏览器中输入URL以及单机链接来请求网页,在URL配置文件urls.py中设置处理主页(http://localhost:8000)的视图函数。

    """
    from django.contrib import admin
    from django.urls import path
    from learning_logs import views as learn_view
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', learn_view.index)
    ]
    
    

    视图函数

    在应用learning_log的view.py中编写视图函数:

    from django.shortcuts import render
    from django.http import HttpResponse
    # Create your views here.
    def index(request):
        html = '<html><head><title>Index</title></head>' \
               '<body><h1>Welcome to Ulysses</h1>' \
               '</body>' \
               '</html>'
        return HttpResponse(html)
    

    运行项目,访问主页得到的结果
    在这里插入图片描述
    接下来试着为Topic和Post创建相关链接

    创建其他网页

    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', learn_view.index),
        path('topic/<int:topic_id>/', learn_view.topic, name='topic'),
        path('post/<int:post_id>/', learn_view.post, name='post'),
    ]
    
    

    可以在URL地址指定捕获的值的类型,如<int:id>,指定将url中的’id’转为int型(默认字符串);name参数相当于是给网址添加了一个名称,可以通过这个name,可以在view,models, templates获取网址。只要这个名字不变,在setting.py中修改了url后,也能通过这个名字获取修改后的网址。
    通过reverse(name,args=(,))获取URL。

    >>> from django.urls import reverse
    >>> reverse('topic',args=(1,))
    '/topic/1/'
    >>> reverse('post',args=(1001,))
    '/post/1001/'
    >>> 
    
    

    topic和post视图函数:当访问 ‘http://127.0.0.1:8000/topic/1/’ 时,获取topic_id,在数据库中查询获取对于的topic,将id和text存储在要发送给模板的上下文context中。render接受上下文并讲其赋值给appname/templates下指定的网页,返回一个HttpResponse。当id对应的post或topic不存在时, QuerySet生成DoesNotExist错误。

    def topic(request, topic_id):
        """根据id访问topic的信息"""
        try:
            t = Topic.objects.get(id=topic_id)
            text = t.text
            context = {'id':topic_id, 'text':text}
            return render(request, 'topic.html', context)
        except Topic.DoesNotExist:
            return HttpResponseNotFound(f'<h1>Topic:{topic_id} not exist</h1>')
    
    def post(request, post_id):
        """根据id访问post信息"""
        try:
            t = Post.objects.get(id=post_id)
            text = t.text
            context = {'id': post_id, 'text': text}
        except Post.DoesNotExist:
            raise Http404(f'Post:{post_id} not exist')
        return render(request, 'post.html', context)
    
    

    使用HttpResponseNotFound 来定义错误界面,Web最常见的错误类型就是404错误。手动抛出Http404错误,Django会捕获这个错误并返回一个标准的404错误界面和404错误码。
    Django的404错误界面
    在这里插入图片描述
    POST界面
    在这里插入图片描述

    模板

    模板是包含响应文本的文件,其中包含占位变量表示的动态部分,其具体值只在请求的上下文才知道。使用真实值替换变量,再返回最终得到的响应字符串,这一过程称为渲染

    基本语法

    1. 控制结构{% %}
    2. 变量 {{ }}
    3. 注释{# #}
      例如:
    {#  Django #}
    {% extends "base_generic.html" %}
    
    {% block title %}{{ section.title }}{% endblock %}
    
    {% block content %}
    <h1>{{ section.title }}</h1>
    
    {% for story in story_list %}
    <h2>
      <a href="{{ story.get_absolute_url }}">
        {{ story.headline|upper }}
      </a>
    </h2>
    <p>{{ story.tease|truncatewords:"100" }}</p>
    {% endfor %}
    {% endblock %}
    

    变量

    在模板中的{{ i }}结构表示变量,这是一种特殊的占位符,告诉模板引擎这个位置的值从渲染模板时使用的数据结构中获取。Django支持python中所有的Python数据类型比如列表、字段、对象等

    <p>this is a dicectory:{{ mydict['key'] }} </p>
    <p>this is a list:{{ mylist[3] }} </p>
    <p>this is a object:{{ myobject.something() }} </p>
    {% for k, v in defaultdict.items %}
        Do something with k and v here...
    {% endfor %}
    

    变量过滤器

    变量的值可以使用过滤器修改。过滤器在添加变量名后,二者以竖线分隔。如:

    <p>Hello, {{ user|capitalize }}!</p>
    

    有些过滤器带有参数: {{ bio|truncatewords:30 }}:会显示bio的前30个单词。当参数中有空格时必须带引号,如 {{ list|join:", " }}

    过滤器名 说明 example
    add 加法运算,给变量加一个值,当两个变量都为列表时,相当于extend {{ value|add:"2" }}
    {{ first|add:second }}
    addslashes 给引号前加斜杠: "I\'m using Django" {{ value|addslashes }}
    capfirst 首字母大写:django-> Django {{ value|capfirst }}
    center 指定变量居中:" Django " "{{ value|center:"15" }}"
    cut 除去变量中的指定值 “String with spaces” -> “Stringwithspaces” {{ value|cut:" " }}
    date 指定日期时间的输出格式 {{ value|date:"D d M Y" }}
    default 变量的值为False或为空指定一个默认值 {{ value|default:"nothing" }}
    default_if_none 变量值为且仅为None时,指定默认值 {{ value|default_if_none:"nothing" }}
    dictsort 根据给定的键对字典进行排序,也可对序列的列表进行排序 {{ value|dictsort:"name" }}
    {{ value|dictsort:0 }}
    dictsortreversed 排序,与dictsort相反
    divisibleby 是否内被整除,返回True,False {{ value|divisibleby:"3" }}
    escape 转义HTML字符串< 变为&lt; {% autoescape off %}
    {{ title|escape }}
    {% endautoescape %}
    escapejs 转义javascript字符 {{ value|escapejs }}
    filesizeformat 将值的大小,格式化为易读的形式’13 KB’, ‘4.1 MB’, ‘102 bytes’, etc {{ value|filesizeformat }}
    first 返回列表的首个元素 {{ value|first }}
    floatformat 省略小数位,默认舍入到一个小数位 {{ value|floatformat : 3}}
    force_escape 转义多个HTML字符串 {% autoescape off %}
    {{body|linebreaks|force_escape }}
    {% endautoescape %}
    get_digit 获取指定位置数值,从右数起 {{ value|get_digit:"2" }}
    iriencode 转义iri字符 {{ value|iriencode }}
    join 给序列增加一个字符串,像python的str.join(list) {{ value|join:" // " }}
    json_script 将Python数据以JSON形式输出 {{ value|json_script:"hello-data" }}
    last 输出序列的最后一个元素 {{ value|last }}
    length 变量的长度 {{ value|length }}
    length_is 变量长度是否为指定值 {{ value|length_is:"4" }}
    linebreaks 使用HTML的换行符单换行:<br>,换行空行<p> {{ value|linebreaks }}
    linebreaksbr 使用<br>换行 {{ value|linebreaksbr }}
    linenumber 显示行号 {{ value|linenumbers }}
    ljust 左对齐 "{{ value|ljust:"10" }}"
    lower 全部变为小写 {{ value|lower }}
    make_list 将变量拆分成列表形式 {{ value|make_list }}
    phone2numeric 将电话号码(可能包含字母)转换为其等效数字 {{ value|phone2numeric }}
    pluralize 返回复数后缀,默认’s’ {{ num_messages|pluralize }}
    pprint 包装了pprint.pprint()的装饰器
    random 返回变量列表的随机元素 {{ value|random }}
    rjust 右对齐 "{{ value|rjust:"10" }}"
    safe 将字符串标记为在输出之前不需要进一步的HTML转义。当autoescaping关闭时,此过滤器无效 {{ var|safe|escape }}
    safeseq 将安全过滤器应用于序列的每个元素。 与在序列上运行的其他过滤器结合使用,例如join {{ some_list|safeseq|join:", " }}
    slice 返回切片 {{ some_list|slice:":2" }}
    slugify 转换为ASCII码,将空格转换为连字符。 删除不是字母数字,下划线或连字符的字符。 转换为小写。 还剥去前导和尾随空格。 {{ value|slugify }}
    stringformat 根据参数格式化变量,10->1.000000E+01 {{ value|stringformat:"E" }}
    striptags 去除[X]HTML标记 {{ value|striptags }}
    time 格式化时间格式 {{ value|time:"H:i" }}
    timesince 自给定时间后过去了的间隔(e.g., “4 days, 6 hours”) {{ blog_date|timesince:comment_date }}
    timeuntil 距给定时间还有… {{ conference_date|timeuntil:from_date }}
    title 将字符转为标题形式 {{ value|title }}
    truncatechars 如果字符串长于指定的字符数,则截断该字符串 {{ value|truncatechars:9 }}
    truncatechars_html 截短HTML标签内字符 {{ value
    truncatewords 根据指定数值截断单词 {{ value|truncatewords:2 }}
    truncatewords_html 截短HTML标签内的单词 {{ value|truncatewords_html:2 }}
    unordered_list 递归地获取自嵌套列表并返回HTML无序列表 - 没有打开和关闭<ul>标记。 {{ var|unordered_list }}
    upper 大写 {{ value|upper }}
    urlencode 转义变量中的url的 {{ value|urlencode }}
    urlize 将url和email地址转换为可点击的形式 {{ value|urlize }}
    urlizetrunc 将url和email地址转换为可点击的形式,限制长度 {{ value|urlizetrunc:15 }}
    wordcount 单词数统计 {{ value|wordcount }}
    wordwrap 根据给的行长度包装 {{ value|wordwrap:5 }}
    yesno 映射True, False, None {{ value|yesno:"yeah,no,maybe" }}
    • 默认自动转义:{'name':'<b>Hello</b>'}结果为<b>Hello</b>
    • 关闭autoescape:{'name':'<b>Hello</b>'}结果为Hello
    • safe不转义:{'name':'<b>Hello</b>'}结果为Hello

    默认情况下出于安全考虑会转义所有变量。当一个变量为<b>Hello</b>没有添加safe过滤器时,显示的结果为
    在这里插入图片描述
    浏览器能显示<b>元素,但不会解释它。
    当添加safe过滤器时,结果为
    在这里插入图片描述
    当需要显示变量中存储的HTML代码时,可使用safe过滤器。

    控制结构

    条件判断语句与Python类似,但其不需要使用冒号结尾,而结束控制语句,需要使用endif关键字:

    {% if daxin.safe %}
    	daxin is safe.
    {% elif daxin.dead %}
    	daxin is dead
    {% else %}
    	daxin is okay
    {% endif %}
    

    for循环实现一组元素的渲染:

    <ul>
    {% for user in users %}
    	<li>{{ user.username|title }}</li>
    {% endfor %}
    </ul>
    

    模板继承

    模板继承类似于python代码的类继承。首先创建名为base.html的基模板:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <link rel="stylesheet" href={{ static('css/mystyle.css') }}>
        <title>{% block title %}My amazing site{% endblock %}</title>
    </head>
    
    <body>
        <div id="sidebar">
            {% block sidebar %}
            <ul>
                <li><a href="/">Home</a></li>
                <li><a href="/blog/">Blog</a></li>
            </ul>
            {% endblock %}
        </div>
    
        <div id="content">
            {% block content %}{% endblock %}
        </div>
    </body>
    </html>
    

    基模板中定义的区块可在衍生模板中覆盖。使用blockendblock指令在基模板中定义内容区块。在上述基模板中定义了head、title、content和footer区块。
    新建一个topics.html的文件,继承基模板,用来显示全部的topics。

    {% extends "base.html" %}
    
    {% block title %}Topics{% endblock %}
    {% block head %}
        {{ block.super }}
    
    {% endblock %}
    {% block content %}
    {% for topic in topics %}
        <h2>{{ topic.id }}</h2>
        <p>{{ topic.text }}</p>
    {% endfor %}
    {% endblock %}
    

    extends指令声名这个模板衍生自base.html。在extends指令后,基模板的4个区块被重新定义,模板引擎将其插入合适的位置。如果基模板和衍生模板的同名区块有内容,衍生模板的内容会被显示。在衍生模板区块中调用block.super,引用基模板的同名内容。topics.html里的head区块引用了基模板的css文件。

    css等静态文件的使用

    在应用目录下创建static文件夹,存放css、图片等静态文件: 在这里插入图片描述
    指定css文件路径

    	{# jinja2 #}
        {% block head %}
        <link rel="stylesheet" href={{ static('css/mystyle.css') }}>
    	
    	{# django #}
    	{% load static %}
    	<link rel="stylesheet" href={{ static('css/mystyle.css') }}>
    	
    	<img src="{% static 'img/nan.jpg' %}" alt="南风不竞"/>
    

    使用模板创建topics和posts

    视图函数:

    def topics(request):
        """全部的topics"""
        topics = Topic.objects.order_by('date_added')
        context = {'topics':topics}
        return render(request, 'topics.html', context)
    
    def posts(request):
        """全部的posts"""
        posts = Post.objects.order_by('date_added')
        context = {'posts':posts}
        return render(request, 'posts.html', context)
    

    根据添加时间排序,显示全部的内容。
    映射url:

    urlpatterns = [
        path('admin/', admin.site.urls),
        path('', learn_view.index),
        path('topic/<int:topic_id>/', learn_view.topic, name='topic'),
        path('topics/', learn_view.topics, name='topics'),
        path('post/<int:post_id>/', learn_view.post, name='post'),
        path('posts/', learn_view.posts, name='posts')
    ]
    

    显示的网页:

    在这里插入图片描述

    展开全文
  • 2.标签语法: 由 {% 和 %} 来定义的,例如:{%tag%} {%endtag%} 2.模板的继承与引用 ( 网站中有些不同的页面当中有些数据是完全一模一样的; 有些数据是不一样的但是前端的排版格式是一模一样的 ) Django模版引擎中...

    1.常用标签

    (1)模板标签重要概念:

    1.定义:标签在渲染的过程中提供任意的逻辑

    注意:(这个定义是刻意模糊的。 例如,一个标签可以输出内容,作为控制结构,例如“if”语句或“for”循环从数据库中提取内容,甚至可以访问其他的模板标签。)

    2.标签语法: 由 {% 和 %} 来定义的,例如:{%tag%} {%endtag%}

    (2)常用模板标签讲解及使用:

    1.模板标签中的for循环:

    ①music应用下的views.py文件
    模拟从数据库中得到的数据:

    def test01(request):
        li=["第一条数据", "第二条数据", "第三条数据", "第四条数据", "第五条数据", "第六条数据","第七条数据", "第八条数据",]
        return render(request,"test02.html",context={"li":li})
    

    ②对应的前端html模板文件test02.html
    在此模板中使用模板标签中的for循环

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            p{
                width: 100px;
                color: aqua;
                height: 40px;
                line-height: 40px;
                background-color: skyblue;
            }
        </style>
    </head>
    <body>
    
    {#如果直接使用模板变量这样是列表形式在前端显示:#}
    {{ li }}
    
    {#使用模板标签中的for循环遍历之后就可以使用html对其进行排版了:#}
    <div>
        {% for foo in li %}
            <p>{{ foo }}</p>		{#foo是循环出来的每一条数据,通过循环对每条数据都进行排版!#}
        {% endfor %}
    </div>
    
    </body>
    </html>
    

    ③前端实现:
    在这里插入图片描述

    2.模板标签中的if判断:

    ①music应用下的views.py文件

    {#模拟从前端接收到的用户登录与否的状态信息!#}
    def test01(request):
        b=True
        return render(request,"test02.html",context={"b":b})
    

    ②对应的前端html模板文件test02.html
    在此模板中使用模板标签中的for循环

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    {#简单实现注册登录以及登录成功的判断:#}
    {#模拟用户浏览网页时,如果登录的话显示用户名名;如果未登录的话显示注册 登录。#}
    {% if b %}
        <div>欢迎小明</div>
    {% elif b == "123" %}		{#只是演示下如何进行多重判断,在此处无实际用处!#}
        啊哈
    {% else %}
        <div>注册 登录</div>
    {% endif %}
    
    </body>
    </html>
    

    ③前端实现:
    在这里插入图片描述

    3.模板标签中的页面跳转:

    ①music应用下的urls.py文件(在这里我们可以给相应的url路径取个name属性值,这个值是唯一的!!!)

    from django.contrib import admin
    from django.urls import path
    from . import views
    
    urlpatterns = [     #子路由
        path('test01/',views.test01),
        path('sing/',views.sing,{"name":"小明","age":18},name="bb"),
    ]
    
    

    ②对应的前端html模板文件test02.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    {#实现本地网页的跳转:#}
    {#第一种方法:#}
    {#第一个例子:跳转到首页#}
    <a href="http://127.0.0.1:8888">首页1</a>      {# 如果直接写首页路径,今后万一咱的域名改变了,那么所有跳转的都要跟着一个个改,太麻烦啦! #}
    <a href="/">首页2</a>                            {# 这种方法就避免了刚刚说的情况!  /代表的就是当前的ip地址加端口号:http://127.0.0.1:8888 #}
    
    {#第二个例子:跳转到带有路径的html界面#}
    <a href="http://127.0.0.1:8888/music/sing/">跳转1</a>     {# 这样也可能会出现刚刚说的那种情况 #}
    <a href="/music/sing">跳转2</a>                             {#  这样不会出现刚刚说的那种情况,但是如果咱对应url的路径进行了改变,也会产生与刚刚类似的情况#}
    
    {#第二种方法:   不管域名或者路径如何改变,name值不变就不需要改变,简单#}
    <a href="{% url 'bb' %}">跳转3</a>		{#通过url的name属性值跳转到对应的页面!#}
    
    </body>
    </html>
    
    4.模板标签中的开启和关闭自动转义(是否让html标签在前端中生效!):

    ①music应用下的views.py文件

    def test01(request):
        html1='<h1>拉拉</h1>'
        html2='<h1>拉拉</h1>'
        html3='<h1>拉拉</h1>'
        html4='<h1>拉拉</h1>'
        return render(request,"test02.html",context={"h1":html1,"h2":html2,"h3":html3,"h4":html4})
    

    ②对应的前端html模板文件test02.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    {#如果我们使用过滤器的话,那么一次只能识别一个,如果数量非常多的话,工作量就太大了!#}
    {{ h1|safe }}
    
    {#所以模板标签为我们解决了这个问题,不管需要开启自动转义的有多少个,位置分的有多散,只要将其包裹在下面的两行代码之内,都可开启其的自动转义!#}
    {% autoescape off %}
    	{{ h1 }}
    	{{ h2 }}
    	{{ h3 }}
    {% endautoescape %}
    
    </body>
    </html>
    
    4.模板标签中的url携带参数传递

    (前面通过转换器可以实现借由url进行参数传递;现在模板标签也可以进行参数传递!)
    在这里插入图片描述
    在这里插入图片描述

    5.模板标签中的注释:

    在这里插入图片描述

    2.模板的继承与引用


    网站中有些不同的页面当中有些数据是完全一模一样的;
    有些数据是不一样的但是前端的排版格式是一模一样的

    Django模版引擎中最强大也是最复杂的部分就是模版继承了。 模版继承可以让你创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 blocks 。

    (1)首先,看一个例子:(同一个站点下有三个html模板,样式如下!!!)

    ①第一个html模板:

    a_first.html文件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            *{
                margin: 0;
                padding: 0;
            }
            .top{
                height: 200px;
                background: darkgoldenrod;
            }
            .con{
                height: 500px;
                background: aqua;
            }
            .but{
                height: 150px;
                background: sandybrown;
            }
        </style>
    </head>
    <body>
    <div>
        <div class="top">头部</div>
        <div class="con">内容一</div>
        <div class="but">底部</div>
    </div>
    </body>
    </html>
    

    前端实现:
    在这里插入图片描述

    ②第二个html模板:

    a_second.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            *{
                margin: 0;
                padding: 0;
            }
            .top{
                height: 200px;
                background: darkgoldenrod;
            }
            .con{
                height: 500px;
                background: aqua;
            }
            .but{
                height: 150px;
                background: sandybrown;
            }
            .con .left{
                width: 70%;
                float: left;
                height: 100%;
                background: red;
            }
            .con .right{
                width: 30%;
                float: left;
                height: 100%;
                background: #352fff;
            }
        </style>
    </head>
    <body>
    <div>
        <div class="top">头部</div>
        <div class="con">
            <div class="left">内容二</div>
            <div class="right">广告</div>
        </div>
        <div class="but">底部</div>
    </div>
    </body>
    </html>
    

    前端实现:
    在这里插入图片描述

    ③第三个html模板:

    a_third.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            *{
                margin: 0;
                padding: 0;
            }
            .top{
                height: 200px;
                background: darkgoldenrod;
            }
            .con{
                height: 500px;
                background: aqua;
            }
            .but{
                height: 150px;
                background: sandybrown;
            }
            .con .left{
                width: 70%;
                float: left;
                height: 100%;
                background: #f338ff;
            }
            .con .right{
                width: 30%;
                float: left;
                height: 100%;
                background: #24ff44;
            }
        </style>
    </head>
    <body>
    <div>
        <div class="top">头部</div>
        <div class="con">
            <div class="left">内容三</div>
            <div class="right">广告</div>
        </div>
        <div class="but">底部</div>
    </div>
    </body>
    </html>
    

    前端实现:
    在这里插入图片描述

    (2)不难看出,这三个前端界面头部和底部是一模一样的;后两个的中间内容部分右侧也都是广告页面。而我们为了实现这三个html界面分别码了那么多重复的代码,费时费力,考虑到类可以继承,那么咱的html模板能否继承呢?答案是肯定的,下面咱们来使用模板的继承看一看可以给咱节省多少精力:

    在这里插入图片描述

    ①编写父级模板base.html:(编写父级模板原则:相同的部分直接编写代码,使子模板直接继承[模板继承使用extends标签实现];不同的部分通过使用block来给子模板开放接口,使子模板可以进行覆写[模板覆写使用block标签实现])
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            *{
                margin: 0;
                padding: 0;
            }
            .top{
                height: 200px;
                background: darkgoldenrod;
            }
            .con{
                height: 500px;
                background: aqua;
            }
            .but{
                height: 150px;
                background: sandybrown;
            }
            .con .right{
                width: 30%;
                float: left;
                height: 100%;
                background: #352fff;
            }
        </style>
        {% block style %}{% endblock %}			  {#让子模板可以对css样式进行覆写!#}
    </head>
    <body>
    <div>
        <div class="top">头部</div>
        <div class="con">
            {% block con %}
                {% block left %}
    
                {% endblock %}
    
                {% block right %}
                    <div class="right">广告</div>
                {% endblock %}
            {% endblock %}
        </div>
        <div class="but">底部</div>
    </div>
    </body>
    </html>
    
    ②第一个html模板:

    a_first.html文件:

    {% extends 'music/base.html' %}
    
    
    {% block con %}
        内容一
    {% endblock %}
    
    
    ②第二个html模板:

    a_second.html文件:

    {% extends 'music/base.html' %}
    
    {% block style %}
        <style>
                .con .left{
                width: 70%;
                float: left;
                height: 100%;
                background: red;
            }
        </style>
    {% endblock %}
    
    {% block left %}
        <div class="left">内容二</div>
    {% endblock %}
    
    
    ②第三个html模板:

    a_third.html文件:

    {%  extends 'music/base.html' %}
    
    {% block style %}
        <style>
            .con .left{
                width: 70%;
                float: left;
                height: 100%;
                background: #f338ff;
            }
            .con .right{
                width: 30%;
                float: left;
                height: 100%;
                background: #24ff44;
            }
        </style>
    {% endblock %}
    
    {% block left %}
        <div class="left">内容三</div>
    {% endblock %}
    

    (3)经过Django实现会发现跟上面不使用模板继承效果一模一样!!!而且咱的代码简洁太多 。来总结一下模板的继承及引用:

    模板继承使用extends标签实现。通过使用block来给子模板开放接口。
    1、extends必须是模板中的第一个出现的标签。
    2、子模板中的所有内容,必须出现在父模板定义好的block中,否则django将不会渲染。
    3、如果出现重复代码,就应该考虑使用模板。
    4、尽可能多的定义block,方便子模板实现更细的需求。
    5、如果在某个block中,要使用父模板的内容,使用block.super获取。

    展开全文
  • URL

    2018-08-30 10:25:47
    前言:  做嵌入式软件开发也快四年了,突然私下想玩玩web...二.URL语法 三.URL相关举例 四.参考文档   一.URL定义  Uniform Resource Locators,the syntax and semantics for a compact string representa...
  • YDOOK:Python3.9: 标准用法实例 © YDOOK JY Lin 1. 语法: () 2. 实例代码展示: 在这里插入代码片 3. 运行结果展示: 在这里插入代码片
  • 基本使用方法如下 /* ...* @语法:new URLSearchParams(parameter); */ (function(){ var str = "http://www.domain.com/?user=Alan&id=123&id=456"; var searchParams = new U...
  • 文章目录Django安装Django的MTV框架说明:Django项目目录说明:user下目录说明:创建User的Model类迁移后台管理定义urls选择器 Django Django采用mvc架构开发的开源WEB快速开发框架 优点: 能够快速开发,自带ORM,...
  • ENDPOINT_URL ='TCP://system-address:port' 指定SQL Server实例上数据库镜像终结点的URL路径,该实例承载在当前replica on子句中定义的可...
  • 谷歌语法

    2021-04-09 09:35:35
    intitle:关键字 搜索网页标题中含有这些关键字的网页。...搜索关键字的定义。 info:关键字 搜索指定站点的一些基本信息。 link:关键字 查找与关键字做了链接的URL地址。 related:URL 搜索与指定URL相关的页面。 组
  • Html 语法学习笔记二

    千次阅读 2015-07-12 16:56:03
    1、图像标签()和源属性(Src) 在 HTML 中,图像由 标签定义。 是空标签,意思是说,它只包含属性,并且没有闭合标签。... 定义图像的语法是: URL 指存储图像的位置。如果名为 "boat.gif" 的图像
  • markdown流程图语法

    2020-02-29 11:11:33
    文章目录markdown流程图语法一、流程图定义部分1.定义元素的语法2.各个含义二、连接流程图元素部分三、例 一、流程图定义部分 1.定义元素的语法 tag=>type:content:>url 2.各个含义 tag流程图的标签,在第...
  • axios基本语法

    2020-11-03 22:23:27
    axios基本语法 html设置4个按钮再js获取别忘了引入axios //指定默认配置 axios.defaults.baseURL=‘http://localhost:3000’ 发送get请求 axios({ url:’/posts’, //url参数 对象 params:{ id: 1 }, }) .then...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,489
精华内容 595
关键字:

url语法定义