首先我们在上篇文章中创建的应用 app_1 中的视图文件 views.py 中编写以一个带参数的函数 function ,并传入一个参数 num:
内容如下:
from django.shortcuts import render
from django.http import HttpResponse
def function(request,num):
return HttpResponse(f'give function a num :{num}')
这段代码将会在待会访问的网站中显示 HttpResponse 中的内容
然后还要给这个视图文件配置一个子路由
在应用 app_1 下的路由文件 urls.py 中添加以下内容:
from django.urls import re_path
from . import views
urlpatterns = [
re_path(r'^2/(2019)$',views.function)
]
这里要注意了!!因为待会需要使用到正则,所以 path 要改为 re_path ,不然是会报错的,其他的书写格式也要注意一下哟!
对于要传递的参数需要用 括号() 括起来,这里是传入一个常数: 2019
然后启动服务:
python manage.py runserver #这里是内网哦!
最后打开浏览器访问如下地址:
http://127.0.0.1:8000/app_1/2/2019
上面传递参数的过程是在网址中传递参数并在视图中显示出来
显示内容是:
give function a num :2019
因此得出传参的过程是将子路由文件中括号括起来的实参 2019 传递给了视图文件中的 function()的 num 变量
另外可以通过正则表达式让传递的参数变得更加灵活,比如我可以通过传递3位数的任意数字访问这个网页内容
那可以这样写代码,在应用 app_1 下的路由文件 urls.py 中添加以下内容:
from django.urls import re_path
from . import views
urlpatterns = [
re_path(r'^2/([0-9]{3})$',views.function) #第一种
re_path(r'^2/(/d{3})$',views.function) #第二种
]
正则涉及很多知识,这里不做重点
这样写就可以实现在网址中输入任意三位字符均可访问该网站内容
比如输入:
http://127.0.0.1:8000/app_1/2/198
http://127.0.0.1:8000/app_1/2/110
http://127.0.0.1:8000/app_1/2/119
访问以上网址均可看到页面内容:
give function a num :198
give function a num :110
give function a num :119
就是在网址中指定将要调用函数里的参数名
在应用 app_1 下的路由文件 urls.py 中添加以下内容:
from django.urls import re_path
from . import views
urlpatterns = [
re_path(r'^2/(?P[0-9]{3})$',views.function)
]
代码中通过 ?P 指定函数 function 的参数必须是 yy ,否则无效,注意 P 是大写
也就是说 funtion 函数的内容应该变成了这样:
from django.shortcuts import render
from django.http import HttpResponse
def function(request,yy):
return HttpResponse(f'give function a num :{yy}')
变量 num 改为了 变量 yy
当输入的网址错误时我们需要返回给用户一个相对应错误,所以需要制作一个处理错误的模板,这里以404错误为例
首先在项目 project_1 下创建一个模板文件夹 templates,在该文件夹中创建一个404.html 文件
内容如下:
404错误页面
自定义404错误页面
这是自己定义的一个简单的页面
然后在项目 project_1 下的配置文件 settings 文件中找到 TEMPLATES
它的内容是这样的:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [], #待会要添加信息的地方
'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',
],
},
},
]
然后添加键 DIRS 对应的值为:
'DIRS': [os.path.join(BASE_DIR,'templates')]
BASE_DTR 是指当前的项目目录,templates是指刚才创建模板目录
除此之外还要将 DEBUG 的值改为 False,不然会出现调试页面,就看不到模板页面了
然后在浏览器随便输入一个错误的网址,就会自动跳转到这个模板页面
显示内容:
自定义的404错误页面信息
不过在学习测试阶段建议 DEBUG 的值设置为 True ,出错后方便调试
我将它理解成输出重定向,就是输入这个网址,但网页输出的是另外一个指定网址的页面内容
首先在应用app_1 目录下的视图文件中新建一个 func 函数,内容如下:
from django.shortcuts import render
from django.http import HttpResponse,HttpResponseRedirect #导入了两个函数
from django.urls import reverse #这个也是新导入的
def func(request):
return HttpResponseRedirect(reverse('hello')) #重定向到名为 hello 的网址页面
def hello(request):
return HttpResponse('hello , my first django !')
然后在应用 app_1 目录下的子路由文件 urls.py 中添加以下信息:
from django.urls import re_path
from . import views
urlpatterns = [
re_path(r'^$', views.hello,name='hello' ),
# 多加了 name 参数哦!就是将这个网址路径命名为hello
re_path(r'^func/$',views.func,name='func')
]
然后在浏览器输入:
http://127.0.0.1:8000/app_1/func
网页显示的内容是:
hello , my first django !
网址变成了:
http://127.0.0.1:8000/app_1/
注:当前使用的Django 版本为 2.0 版本
学习资料:CSDN《python全栈工程师特训班》
# URL配置
首先我们在上篇文章中创建的应用 app_1 中的视图文件 views.py 中编写以一个带参数的函数 function ,并传入一个参数 num:
内容如下:
from django.shortcuts import render
from django.http import HttpResponse
def function(request,num):
return HttpResponse(f'give function a num :{num}')
这段代码将会在待会访问的网站中显示 HttpResponse 中的内容
然后还要给这个视图文件配置一个子路由
在应用 app_1 下的路由文件 urls.py 中添加以下内容:
from django.urls import re_path
from . import views
urlpatterns = [
re_path(r'^2/(2019)$',views.function)
]
这里要注意了!!因为待会需要使用到正则,所以 path 要改为 re_path ,不然是会报错的,其他的书写格式也要注意一下哟!
对于要传递的参数需要用 括号() 括起来,这里是传入一个常数: 2019
然后启动服务:
python manage.py runserver #这里是内网哦!
最后打开浏览器访问如下地址:
http://127.0.0.1:8000/app_1/2/2019
上面传递参数的过程是在网址中传递参数并在视图中显示出来
显示内容是:
give function a num :2019
因此得出传参的过程是将子路由文件中括号括起来的实参 2019 传递给了视图文件中的 function()的 num 变量
另外可以通过正则表达式让传递的参数变得更加灵活,比如我可以通过传递3位数的任意数字访问这个网页内容
那可以这样写代码,在应用 app_1 下的路由文件 urls.py 中添加以下内容:
from django.urls import re_path
from . import views
urlpatterns = [
re_path(r'^2/([0-9]{3})$',views.function) #第一种
re_path(r'^2/(/d{3})$',views.function) #第二种
]
正则涉及很多知识,这里不做重点
这样写就可以实现在网址中输入任意三位字符均可访问该网站内容
比如输入:
http://127.0.0.1:8000/app_1/2/198
http://127.0.0.1:8000/app_1/2/110
http://127.0.0.1:8000/app_1/2/119
访问以上网址均可看到页面内容:
give function a num :198
give function a num :110
give function a num :119
就是在网址中指定将要调用函数里的参数名
在应用 app_1 下的路由文件 urls.py 中添加以下内容:
from django.urls import re_path
from . import views
urlpatterns = [
re_path(r'^2/(?P[0-9]{3})$',views.function)
]
代码中通过 ?P 指定函数 function 的参数必须是 yy ,否则无效,注意 P 是大写
也就是说 funtion 函数的内容应该变成了这样:
from django.shortcuts import render
from django.http import HttpResponse
def function(request,yy):
return HttpResponse(f'give function a num :{yy}')
变量 num 改为了 变量 yy
当输入的网址错误时我们需要返回给用户一个相对应错误,所以需要制作一个处理错误的模板,这里以404错误为例
首先在项目 project_1 下创建一个模板文件夹 templates,在该文件夹中创建一个404.html 文件
内容如下:
404错误页面
自定义404错误页面
这是自己定义的一个简单的页面
然后在项目 project_1 下的配置文件 settings 文件中找到 TEMPLATES
它的内容是这样的:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [], #待会要添加信息的地方
'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',
],
},
},
]
然后添加键 DIRS 对应的值为:
'DIRS': [os.path.join(BASE_DIR,'templates')]
BASE_DTR 是指当前的项目目录,templates是指刚才创建模板目录
除此之外还要将 DEBUG 的值改为 False,不然会出现调试页面,就看不到模板页面了
然后在浏览器随便输入一个错误的网址,就会自动跳转到这个模板页面
显示内容:
自定义的404错误页面信息
不过在学习测试阶段建议 DEBUG 的值设置为 True ,出错后方便调试
我将它理解成输出重定向,就是输入这个网址,但网页输出的是另外一个指定网址的页面内容
首先在应用app_1 目录下的视图文件中新建一个 func 函数,内容如下:
from django.shortcuts import render
from django.http import HttpResponse,HttpResponseRedirect #导入了两个函数
from django.urls import reverse #这个也是新导入的
def func(request):
return HttpResponseRedirect(reverse('hello')) #重定向到名为 hello 的网址页面
def hello(request):
return HttpResponse('hello , my first django !')
然后在应用 app_1 目录下的子路由文件 urls.py 中添加以下信息:
from django.urls import re_path
from . import views
urlpatterns = [
re_path(r'^$', views.hello,name='hello' ),
# 多加了 name 参数哦!就是将这个网址路径命名为hello
re_path(r'^func/$',views.func,name='func')
]
然后在浏览器输入:
http://127.0.0.1:8000/app_1/func
网页显示的内容是:
hello , my first django !
网址变成了:
http://127.0.0.1:8000/app_1/
注:当前使用的Django 版本为 2.0 版本
学习资料:CSDN《python全栈工程师特训班》