路由分配及模板渲染

路由系统

urlpatterns = [
path('admin/', admin.site.urls),
path('teacher/',include('teacher.urls'))
]

  根据path的顺序依次匹配路径,如果路径匹配则调用后面的方法

例如新建一个视图:

from django.http import HttpResponseZZZ

def index_view(request):
return HttpResponse('我是首页面')

添加路由:

from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('teacher/',include('teacher.urls')),
path('index/',views.index_view)
]

运行结果:



**

参数说明:**

path(route,view,kwargs=None,name=None)

  • route是一个字符串(url规则)
  • view是视图
  • kwargs一个额外参数,是一个字典
  • name url规则名字

在此简单说明一下kwargs参数:

  一个额外的参数(字典类型):加入参数后,所指向的视图必须含有这俩个参数,不然会报错

列如:

#加入kwargs
path('student_detail/<int:pk>/',views.student_detail_view,kwargs={'arg1'='value1','arg2'='value2',.....}
#相应的视图也应加入参数
def student_detail_view(request,pk,arg1,arg2......):
pass

特殊的,如果在include后面加入kwargs,则include所指向的urls文件里面所有指向的视图都需要kwargs参数

特别地:当额外参数与url参数起冲突的时候,以额外参数为准

在url中捕获参数


创建视图:

def student_detail_view(request,pk):
return HttpResponse('学生ID为:%s的详情'%pk)

添加路由:(加入PK参数)

path('student_detail/<pk>/',views.student_detail_view)

运行成功:(显示内容会随着输入内容而改变,即捕获的参数)



转换器


前加限制,不符合条件的内容会显示404

path('student_detail/<int:pk>/',views.student_detail_view)
  • str:匹配除了路径分隔符“/”之外的所有字符串,如果不写转换器,默认字符串转换器
  • int:匹配0或任何正整数
  • slug:匹配任意的ASCLL字符,或数字组成的slug字符串,连字符和下划线
  • path:匹配任何非空字符串,包括路径分隔符‘/’

使用正则表达式——>加以限制条件

注意:正则表达式下匹配的参数都会转换成字符串

re_path(route,view,kwargs=None,name=None)

例如:

re_path(r'student_detail/(?P<pk>\d+)/',views.student_detail_view)
#等同于上面的student_detail

映射应用的views(上面的是映射根目录里面的views)

使用include(可有多级)

path('teacher/',include('teacher.urls'))

即:把以teacher开头的匹配截取,把后面的部分拿到teacher.urls里面进行路由匹配(即子路由【应用里面的路由】)

url命名


重定向,redirect方法

例如:使用redirect重定向之后,输入地址后会跳转到百度网址

def my_redirect(request):
return redirect('https://www.baidu.com')

同样可以跳转项目内的其他地址:

例如:

def index(request):
return HttpResponse('这是第一个Django项目,老师端!') def login_views(request):
return redirect('/teacher/index')

则会跳转到index(发生了跳转):

**

注意:如果像以上这样使用redirect会导致编码死板,可维护性差,在项目里面如果路径一旦修改则难以维护代码**

使用name参数解决:

#路由部分:
path('index/',views.index,name ='index') #views部分:
def login_views(request):
home_url = reverse('index')
return redirect(home_url)

  reverse('name')里面参数填写url的命名,赋予变量home_url(自定义名字),redirect()里面使用变量,当路由的'index/',变换名字之后,视图里面不需要更改,reverse()会自动获取新的地址

另外注意:

  当多个应用里面的url的name相同的时候,在每个应用的urls.py下设置一个app_name = '应用名'(应用名不重复)

#urls.py下设置app_name
app_name = 'teacher' #相应的views.py下也要做出更改
def login_views(request):
home_url = reverse('teacher:index')
return redirect(home_url)
#reverse('应用名:url名')

模板系统

在项目文件夹下的settings.py里面

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': [] :配置模板路径

在项目根目录下新建一个文件(规范名:templates)

settings.py下的BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))代表的是项目路径,所以要进行拼接

'DIRS': [os.path.join(BASE_DIR,'templates')],

Django就回到templates下查找模板文件

再在templates下创建对应的app名字的文件夹(举例teacher),在teacher下创建html文件

使用html

导入模块```from django.template.loader import get_template```
使用get_template()获取html文件,并且解析
```
def index(request):
t = get_template('teacher/index.html')
html = t.render()
return HttpResponse(html)
```
运行成功:
![](https://img2018.cnblogs.com/blog/1488523/201903/1488523-20190326162623379-1036590949.png)

另外直接使用render()方法更加简洁:

def index(request):
return render(request,'teacher/index.html')
#等同于上面的写法

url路由配置以及渲染方式的更多相关文章

  1. Django 02 url路由配置及渲染方式

    Django 02 url路由配置及渲染方式 一.URL #URL #(Uniform Resoure Locator) 统一资源定位符:对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是 ...

  2. django中url路由配置及渲染方式

    今天我们学习如何配置url.如何传参.如何命名.以及渲染的方式,内容大致有以下几个方面. 创建视图函数并访问 创建app django中url规则 捕获参数 路径转换器 正则表达式 额外参数 渲染方式 ...

  3. Django 学习第二天——URL路由及模板渲染方式

    URL 的概念及格式: URL的引入:客户端:知道了url 就可以去进行访问: 服务端:设置好了url,别人才能访问到我 URL :网址(全球统一资源定位符):由 协议,域名(ip port) ,路径 ...

  4. 3/19 Django框架 url路由配置及模板渲染

    3/19 Django框架 url路由配置及模板渲染 1.路由分配 URL(Uniform Resoure Locato):统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示, ...

  5. Django学习手册 - 正则URL路由配置/路由分发

    ############################################### 总结: 一.url路由配置: 方式一:(通过url链接get获取) 方式二:(url路由匹配方式获取-拓 ...

  6. Django(一):url路由配置和模板渲染

    urls.py路由用法 url基本概念 url格式 urls.py的作用 url解析过程 include的作用 kwarg的作用 name的作用 URL概念 URL(Uniform Resoure L ...

  7. 8.MVC框架开发(URL路由配置和URL路由传参空值处理)

    1.ASP.NET和MVC的路由请求处理 1)ASP.NET的处理 请求---------响应请求(HttpModule)--------处理请求(HttpHandler)--------把请求的资源 ...

  8. django-2-路由配置及渲染方式

    <<<视图>>> (1)首先要注册创建好的app (2)配置路由 在app目录下新建一个urls.py模块 模块里面复制myproject目录下urls.py里面的 ...

  9. SpringMVC,3种不同的URL路由配置方法

    1. 先说说一种比较常见的: <servlet> <servlet-name>theDispatcher</servlet-name> <servlet-cl ...

随机推荐

  1. gcc Build-in functions

    https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html gcc -posix -E -dM - </dev/null

  2. wpf treeview 数据绑定 递归绑定节点

    1.先上效果 将所有节点加入ComboBox数据源,在ComboBox中选择时下方Treeview显示该节点下的子节点. 1.xaml文件,将以下代码加入界面合适位置 <StackPanel&g ...

  3. Flask实战-留言板-使用Bootstrap-Flask简化页面编写

    使用Bootstrap-Flask简化页面编写 扩展Bootstrap-Flask内置了可以快速渲染Bootstrap样式HTML组件的宏,并提供了内置的Bootstap资源,方便快速开发,使用它可以 ...

  4. SQL Server嵌套事务

    一.@@TRANCOUNT 在将事务前,我们先来了解一下@@TRANCOUNT ,@@trancount返回上传执行begin transaction语句的事务计数. 1.每执行一次begin tra ...

  5. volatile CAS

    减少上下文切换的方法有无锁并发编程.CAS算法.使用最少线程和使用协程. 无锁并发编程.多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以用一 些办法来避免使用锁,如将数据的ID按照Hash ...

  6. Unity 个人用过的地面检测方案总结

    Unity 个人用过的地面检测方案总结 1.普通射线 在角色坐标(一般是脚底),发射一根向下的射线,长度大约为0.2, 只适用于简单地形,实际使用中常常遇到以下问题 用的collider去碰撞地面时, ...

  7. opencv学习之路(41)、人脸识别

    一.人脸检测并采集个人图像 //take_photo.cpp #include<opencv2/opencv.hpp> using namespace cv; using namespac ...

  8. Windows环境下最新OpenCV和Contribute代码的联合编译【20180926更新红字】

    解决这个问题,目的在于获得并使用最新的完全版本的代码,主要方法是对CMake能够熟练使用,并且对编译等基础支持有所了解. 因为这篇博客经过多次修改,所以里面的内容和配图可能有不是完全比对的地方,但是只 ...

  9. jenkins 启动被杀死

    1.重设环境变量build_id 在execute shell输入框中加入BUILD_ID=DONTKILLME,即可防止jenkins杀死启动的tomcat进程 2.在启动jenkins 的时候禁止 ...

  10. 关于C#的Main(String[] args)参数输入问题

    关于C#的Main(String[] args)参数输入问题 指定相关的测试代码 首先,写一个用于测试的关于Main(String[] args)参数输入有关的代码类,如下: using System ...