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 %}

这样最后的效果如下:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术小站

[ubuntu]安装并使用python 3.6及与2.7的切换

参考自:https://blog.csdn.net/qq_15695761/article/details/77502788

1382
来自专栏源码之家

linux解压处理大于4Gzip文件

6474
来自专栏软件开发 -- 分享 互助 成长

连续多行输入--C++ 中字符串标准输入的学习及实验(续篇)

编程中常常会用到连续多行输入的情况,如果事先知道要输入多少行的话,可以直接定义一个变量,然后用循环就可以实现了,但有时候事先并不知道,要输入多少行,于是就可以用...

3385
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统--任务调度系统解析

任务调度系统是什么:他是一个类似Sql Server的代理,他可以帮助你定时处理一些SQL事务

1444
来自专栏Java开发

spring mvc注入配置文件里的属性

后来想了下,我项目是用spring mvc的,主要是controller需要读取这些配置信息, 而spring mvc的配置文件和spring的配置文件非同一...

1343
来自专栏hbbliyong

nodejs配置简单HTTP服务器

1.介绍 http-server 是一个简单的零配置命令行HTTP服务器, 基于 nodeJs.  如果你不想重复的写 nodeJs 的 web-server....

3095
来自专栏python3

scrapy框架安装

931
来自专栏电光石火

查询局域网电脑的IP,MAC地址

如何在自己电脑端查看局域网中所有用户计算机的IP和MAC地址呢?有时为了局域网管理的需要,可以需要批量获取局域网电脑的IP和MAC地址。以下就与大家分享一下...

2766
来自专栏Jerry的SAP技术分享

Mac终端给命令设置别名alias的办法

在Mac里使用curl https://www.google.com,运行后得不到期望看到的google首页的HTML source code。

1063
来自专栏用户画像

MAC使用nginx分发80至8080端口

由于项目本身的原因,开发必须使用80端口实现,而在MAC系统中非Root用户无法直接使用1024以下的端口

832

扫码关注云+社区