zoukankan      html  css  js  c++  java
  • Django 中url补充以及模板继承

    Django中的URL补充

    默认值

    在url写路由关系的时候可以传递默认参数,如下:

    url(r'^index/', views.index,{"name":"root"}),

    这样在视图函数中,就可以获取这个默认参数name:

    def index(request,name):
        print(name)
        return  HttpResponse("%s is OK" %name)

    命名空间

    通过下面例子理解:

    在项目的urls里写入如下代码:

    urlpatterns = [
    
        url(r'^a/',include("app01.urls",namespace="author"))
    
    ]

    在app的urls里写入如下代码:(注意高亮部分必须有)

    app_name = "app01"
    urlpatterns = [
        url(r'^index/',views.index,name="index")
    ]

    最后在views视图函数中写入如下代码:

    from django.urls import reverse
    
    def index(request):
        v = reverse("author:index")
        print(v)
        return  HttpResponse("is ok")

    当访问页面

    关于获取用户请求信息

    我们在视图函数中写的函数中都加了一个request参数,我们可以通过from django.core.handlers.wsgi import WSGIRequest 导入之后通过request.environ查看详细的信息

    而request.environ是一个字典我们循环之后打印:

        for k,v in (request.environ).items():
            print(k,v)

    则可以看到整个请求头的信息

    模板继承

     

    如果自己的网站中每个页面都有上面这个部分,如果我们在每个页面都重复写这段代码就会很麻烦,并且改动起来也需要每个都改动,为了这种需求,模板继承可以解决这个问题

    把相同的东西写入到模板中,如果某个部分不同则:

    {% block content(这里是自定义名字) %}{% endblock %}

    而在要继承模板的代码中首先:

    {% extends "tp.html" %}  表示要继承的模板

    {% block content(这个名字和在模板中定义的名字保持一致) %}

    <h1>用户管理</h1>

    {% endblock %}

    这样就继承了模板中的内容

    具体代码如下:

    模板中代码如下tp.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>{% block title %}{% endblock %}</title>
        <link rel="stylesheet" href="/static/common.css">
    </head>
    <body>
        <div class="pg-header">
            我的网站
        </div>
        {% block content %}{% endblock %}
    </body>
    </html>

    tp1.html继承tp.html代码如下:

    {% extends "tp.html" %}
    {% block title %}
        主机管理
    {% endblock %}
    
    {% block content %}
    <h1>用户管理</h1>
    {% endblock %}

    tp2.html继承tp.html,代码如下:

    {% extends "tp.html" %}
    {% block title %}
        用户管理
    {% endblock %}
    
    {% block content %}
    <h1>用户管理</h1>
    {% endblock %}

    这样最后登录tp1和tp2的效果如下:

     

    这样就实现了继承,但是这里有个问题,如果tp1和tp2中自己想写自己单独的css以及js的话,就需要做如下操作:

    在head的最下面写如下代码:

    {% block css %}{% endblock %}

    在body的最下面写如下代码:

    {% block js %}{% endblock %}

    这样在tp1以及tp2中就可以自定义自己的css

    例如在tp1中添加如下代码:

    {% block css %}
        <style>
            body{
                background-color: red;
            }
        </style>

    这样再次访问tp1.html的时候效果如下,而访问tp2的时候效果不会发生变化:

     

    include

    当有一些小的标签很多页面都需要用到的时候我们可以单独在一个html中将写标签,在tp1中以及tp2中通过include调用

    具体如下,新添加一个tag.html,代码如下:

    <form>
        <input type="text">
        <input type="text">
    </form>

    在tp1.html中代码如下:

    {% block content %}
    <h1>用户管理</h1>
    {% include "tag.html" %}
    {% endblock %}

    这样最后的效果如下:

  • 相关阅读:
    获取请求IP
    Excel导入工具类兼容xls和xlsx
    Openshift 4.3环境的离线Operatorhub安装
    RHEL学习
    OpenShift Service Mesh 培训作业
    OpenId Connect认证配置
    Route Sharding in OpenShift 4.3
    OpenShift 4.3环境中创建基于Go的Operator
    Quay和Clair的集成
    Quay 基础版安装和部署
  • 原文地址:https://www.cnblogs.com/zhaof/p/6253022.html
Copyright © 2011-2022 走看看