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. go语言笔记——包的概念本质上和java是一样的,通过大小写来区分private,fmt的Printf不就是嘛!

    示例 4.1 hello_world.go package main import "fmt" func main() { fmt.Println("hello, wor ...

  2. MSP430:输入捕获

    在做超声模块时用到 //捕获上升沿 void Capture_Pos(void) { P2SEL |= Echo; //选择P23作为捕捉的输入端子 Timer1_A //TA1CCTL1 |=CM_ ...

  3. gulp的使用安装

    gulp安装:用cnpm的时候把npm换成cnpm就好了. npm install -g gulp(全局安装,安装一次就好) npm install --save-dev gulp(安装到项目目录下, ...

  4. P3399 丝绸之路(线性二维dp)

    P3399 丝绸之路 题目背景 张骞于公元前138年曾历尽艰险出使过西域.加强了汉朝与西域各国的友好往来.从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他们越过崇山峻岭,将中国的先进技术带向中亚. ...

  5. mybatis传参问题总结

    一. 传入单个参数 当传入的是单个参数时,方法中的参数名和sql语句中参数名一致即可 List<User> getUser(int id); <select id="get ...

  6. 音频处理中的尺度--Bark尺度与Mel尺度

    由于人耳对声音的感知(如:频率.音调)是非线性的,为了对声音的感知进行度量,产生了一系列的尺度(如:十二平均律),这里重点说下Bark尺度与Mel尺度.刚开始的时候,我自己也没弄明白这两个尺度的区别. ...

  7. Android点9图的运用

    在Android UI设计开发中,我们经常会用到一些图标.图片来做背景等. 相信很多同学都会遇到一个问题,就是我们让美工做好一张图,一个图标,呃,看起来挺好看的,但是放进app中,扩大或缩小.在不同分 ...

  8. 生成错误:对路径".dll"的访问被拒绝

    第一步:检查dll所在的目录的访问权限,右键文件夹>属性>安全>设置添加EveryOne用户并将完全控制的权限赋给它. 如果问题还没有解决,请不要一遍遍的重启,看第二步: 第二步:右 ...

  9. Python随笔-字符串

    函数title.lower.upper. ct = "hello WORLD" print(ct.title()) #title 以首字母大写的方式显示每个单词 print(ct. ...

  10. SQL 循环插入10000条

    SQL> create table tt_test ( x int, y char(50) ); Table created. SQL> SQL> begin 2 for i in ...