Django

  1. 路由分配设置
  2. re_path正则匹配
  3. include总路由设置
  4. url额外参数的传递
  5. name的使用
  6. 模板的渲染:render方法

 

路由的分配中,

可以设定相应的转换器加以约束,比如只能输入数字,特殊符号。。

形如

from django.urls import path
from . import views urlpatterns = [
path('hello/<int:age>/<name>/', views.hello),
]

设置views以查看结果:(参数格式不正确的话,会无法显示网页)

from django.http import HttpResponse
# Create your views here. def hello(request, age, name):
return HttpResponse('%d岁的%s, 正在学习Django'%(age, name))

类似的还有:

  • str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式
  • int,匹配正整数,包含0。
  • slug,匹配字母、数字以及横杠、下划线组成的字符串。
  • uuid,匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00。
  • path,匹配任何非空字符串,包含了路径分隔符

 

 re_path正则匹配(了解即可,推荐path方法)

from django.urls import path, re_path
from . import views urlpatterns = [
re_path('^hello/$', views.hello),
re_path('^hello/(?P<yy>[0-9]+)/', views.hello),
]

?p: 固定写法

 include总路由设置

在总的项目文件夹下,urls.py一般这样设置:(因为每个app里面都会有很多的路由,这样分类比较方便)

from django.contrib import admin
from django.urls import path, include urlpatterns = [
path('admin/', admin.site.urls),
path('home/', include('book.urls'))
]

然后再app中urls.py中设置:

from django.urls import path
from . import views urlpatterns = [
path('hello/<int:age>/<name>/', views.hello),
]

最后在对应app中设置views.py:

from django.http import HttpResponse
# Create your views here. def hello(request, age, name):
return HttpResponse('%d岁的%s, 正在学习Django'%(age, name))

url参数的传递

urls.py:

from django.urls import path
from . import views urlpatterns = [
path('hello/<int:age>/<name>/', views.hello, {'key': True}),
]

views.py:

from django.http import HttpResponse
# Create your views here. def hello(request, age, name, **kwargs):
if kwargs['key']:
print('True')
return HttpResponse('%d岁的%s, 正在学习Django'%(age, name))

 name的作用:

在url的路由配置中加上一个name的设置的话,在使用到url的路径时,都可以用name的别名代替,减少路由修改和维修的代价

主要应用在页面重定向

模板页面的href跳转({%  url 'url_name' %})

urls.py

from django.urls import path
from . import views urlpatterns = [
path('old/', views.old_page),
path('new/', views.new_page ,name='new'),
]

views.py

from django.shortcuts import render, redirect, reverse
from django.http import HttpResponse
# Create your views here. def old_page(request):
# return HttpResponse('there is a <b>old</b> page')
return redirect(reverse('new')) def new_page(request):
return HttpResponse('there is a <b>new</b> page')

这样在访问老的页面时,就会自动跳转到新的页面,不再写入url的路径

name的作用:

name参数可以给这个url取一个合适的名字。通过给url取名字,以后在view或者模板中使用这个URL,就只需要通过这个名字就可以了。

这样做的原因是防止url的规则更改,会导致其他地方用了这个url的地方都需要更改,但是如果取名字了,就不要做任何改动了。

模板的渲染:render方法

在项目总的大环境下,新建规定的文件名:templates

在配置文件settings.py中,添加templates到模板配置TEMPLATES中:这样app中就可以使用了模板了

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

templates文件夹中新建对应app数目,对应名字的文件夹(这样方便使用,非硬性),新建html文件,以便views渲染

html:(随意写入)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
<style>
* {
background-color: lightgoldenrodyellow;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<h1 style="text-align: center">welcome to my home!</h1><br><br>
<p style="text-align: center; color: royalblue">what do you want?</p>
<a href="{% url 'old' %}">name作用:old页面之无力回天</a><br>
<a href="https://www.baidu.com">有啥不懂得问我</a>
</body>
</html>

html代码划线处是name的第二个常用处

urls.py:

from django.urls import path
from . import views urlpatterns = [
path('views/', views.show_views, name='show_views')
]

views.py:

def show_views(request):
return render(request, 'book/book_index.html')

访问页面:

name的作用,点击还是会被重定向到new页面

Django——2 路由分配设置 re_path正则匹配 include总路由 url传参 name使用 模板渲染render方法 模板渲染方法的更多相关文章

  1. Django(五)1 - 4章实战:从数据库读取图书列表并渲染出来、通过url传参urls.py path,re_path通过url传参设置、模板语法

    一.从数据库读取图书数据并渲染出来 1)app1/views.py函数books编写 [1]从模型下导入bookinfo信息 [2]从数据库获取图书对象列表 [3]把获取到的图书对象赋值给books键 ...

  2. js:通过正则匹配获取页面的url中的参数

    简介:获取页面参数 原生js: //通过正则匹配获取当前页面的url中的参数 function getUrlParam(name){ var reg = new RegExp("(^|&am ...

  3. PHP正则匹配邮件地址、URL

    匹配邮件 #^[A-Za-z0-9]+[\w\.-]*@[A-Za-z0-9]+[A-Za-z0-9\.-]*[A-Za-z0-9]$# 注意 1. \w 表示的是 [A-Za-z0-9_] 包括下划 ...

  4. vue 路由 URL传参

    源码如下: import Vue from 'vue' import VueRouter from 'vue-router' Vue.use(VueRouter) //全局使用该组件 const ro ...

  5. 02-url路由分配及模板渲染方式

    本章主要内容 1.url基本概念及格式 2.path和re_path 3.模板路径配置 4.模板渲染方式 1.url基本概念及格式 URL(uniform Resoure Locator)统一资源定位 ...

  6. 初学django框架 (urls,include子路由,render模板渲染)(一)

    一.urls url的使用为了告诉django哪个url调用那一段代码 如上左图所示,后面的test,test1如下图所示,为视图函数,通过前面的路径,调用后面函数的代码: 只有输入正确的url才会在 ...

  7. Python - Django - form 组件内置的正则校验器

    app01/models.py: from django.db import models class UserInfo(models.Model): username = models.CharFi ...

  8. vue初始化、数据处理、组件传参、路由传参、全局定义CSS与JS、组件生命周期

    目录 项目初始化 组件数据局部化处理 子组件 父组件 路由逻辑跳转 案例 组件传参 父传子 子组件 父组件 子传父 子组件 父组件 组件的生命周期钩子 路由传参 第一种 配置:router/index ...

  9. vue父子组件路由传参的方式

    一.get方式(url传参): 1.动态路由传参: 父组件: selectItem (item) { this.$router.push({ path: `/recommend/${item.id}` ...

随机推荐

  1. bzoj 2217 Lollipop

    题目大意: 有一个长度为n的序列a1,a2,...,an.其中ai要么是1("W"),要么是2("T") 现在有m个询问,每个询问是询问有没有一个连续的子序列, ...

  2. PCB genesis方槽加内角槽孔实现方法

    一.为什么方槽孔加内角孔 如下图,客户来的方槽或Slot槽有内角尺寸要求,通常直接钻一个Slot槽孔内角是不能满足客户要求的,这时我们做CAM的需采用小钻刀进行处理.加内角孔或内角槽的方式进行处理了. ...

  3. windows2003下svn的安装

    Windows2003下svn平台搭建 编辑:dnawo 日期:2010-08-03 转自http://www.mzwu.com/article.asp?id=2557 字体大小: 小 中 大     ...

  4. 当下较热web前端技术汇总

    Web前段技术发展很快,主流技术日新月异,想想自己刚毕业那会用的asp技术,现在已经很少有主流网站在使用了.再到后来的J2EE框架,然后SpringMVC大行其道,但是最近各种js框架被广为传播,Ht ...

  5. 聊聊 webpack 打包如何压缩包文件大小

    想必很多人都经历过做完一个项目后,再打包发现某些文件非常大,导致页面加载时很慢,这就很影响用户体验了,所以在我经历了一些打包后,讲讲如何有效地缩小包体积,加快页面的首屏渲染 动态 polyfill 相 ...

  6. [转]linux之at指令详解

    转自:http://www.2cto.com/os/201409/336183.html 指令:at定时任务,指定一个时间执行一个任务,只能执行一次. 语法:# at [参数] [时间]at> ...

  7. 通过HTTP协议实时获取微信聊天记录

    第一步:登陆 1.get访问微信首页https://wx.qq.com 提供session.headers 用途:获取cookie 后续访问必须带session.headers.cookie这三个参数 ...

  8. 再战primer——decltype 和引用

    刷primer看到原文讲到"引用从来都作为其所指对象的同义词出现,只有用在decltype处是一个例外.",我很是好奇. 这个“引用”当然是指引用类型,like this: ; i ...

  9. java中String类为什么要设计成final?

    1 将方法或类声明为final主要目的是:确保它们不会在子类中改变语义.String类是final类,这意味着不允许任何人定义String的子类. String基本约定中最重要的一条是immutabl ...

  10. 电源管理POWER_SUPPLY_PROP_CAPACITY_LEVEL

    电量计节点中有capacity_level 节点,这个是反应当前电池电流高低水平的参数. 分为critical low full normal 一般是由fg的芯片来判断,通过IIC读取,具体判断可参考 ...