Django 的路由控制,视图以及模板

URL配置就是Django所支撑网站的页面,它的本质就是URL与该URL调用的视图函数之间的映射表;

  我们一般用两种方式进行路由匹配,from Django.urls import path,re_path

  path对应的是相应的路径,也可以利用re_path的方式,它可以利用正则的方式进行匹配

  注意:

    如果要从URL里面捕获一个值,只需要在它两边放一个圆括号,它会自动形成一个参数,传进view

    不需要添加一个前导的反斜杠,因为每个URL都有, 

    每个正则表达式中前面的r''是可选的建议还是加上去,它会高数python这个字段的不需要进行转义

 

    有名分组:就是在路径进行正则匹配的时间通过?P<name>的方式给传入进行的值赋了一个名字,相当于关键字传参,视图层进行取值的时候,也要根据自己的命名去取

 

反向解析:

  在使用Django 项目时,一个常见的需求是获得URL 的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等)。人们强烈希望不要硬编码这些URL(费力、不可扩展且容易产生错误)或者设计一种与URLconf 毫不相关的专门的URL 生成机制,因为这样容易导致一定程度上产生过期的URL。

  在需要URL 的地方,对于不同层级,Django 提供不同的工具用于URL 反查:

  • 在模板中:使用url 模板标签。
  • 在Python 代码中:使用from django.urls import reverse()函数

  反向解析是为了处理更名上面的业务运用场景,如果他的网站的后缀需要改动,那么就会牵扯到大量场景中需要把相应跳转页面端口全部从新更名,如果运用反向解析的方式,只要在回调视图函数后面,给属性name定一个值,然后把template里面使用a标签的时候,直接写name定义的名字就可以了

因为利用name属性的时间,自己在urls中定义的name是没有作用域的,所有Gjango进行反解的时候要去应用命名空间.

project的urls.py:
urlpatterns = [
    re_path(r'^admin/', admin.site.urls),
    re_path(r'^app01/', include("app01.urls",namespace="app01")),
    re_path(r'^app02/', include("app02.urls",namespace="app02")),
]

app01.urls:

urlpatterns = [
    re_path(r'^index/', index,name="index"),
]

app02.urls:

urlpatterns = [
    re_path(r'^index/', index,name="index"),
]
urlpatterns = [
    re_path(r'^index/', index,name="index"),
]

app01.views:

from django.core.urlresolvers import reverse

def index(request):

    return  HttpResponse(reverse("app01:index"))

app02.views:

from django.core.urlresolvers import reverse

def index(request):

    return  HttpResponse(reverse("app02:index"))

 

 

 

Django里面的视图层:

视图层里面有三种方式:render ,HTTPResponse,redirect

  render方法:里面可以有三个参数,request(用于生成请求体对象),template_name=要使用模板的完整名称,context默认是一个空字典,如果有值得话,会在模板页面将模板语法先渲染一下,最终渲染出一个HTML然后返回出去

  HTTPResponse:只有一个参数固定返回一个字段

  redirect:重定义函数,传递一个硬编码的URL,逻辑执行完之后,会跳转到URL路径下面

 

  request.method 获取请求体的请求方法

 

模板层

python的模板:HTML代码+模板语法

在views中执行的python代码中,可以定义任意对象,字典,列表,集合都是可以的利用模板语法就可以直接进行传输进去 

在views中里利用render方法,{{'name':name}},你传入什么格式在模板层你就利用那种方法进行获取相应的值.

过滤器:在显示的时候,在模板层可以通过过滤器的方式对需要展示的内容进行定义,{{name|过滤条件}}

 

模板的继承:

Django方法中有一个非常强大的功能就是模板的复用,进行继承.模板继承中你可以创建一个主语版,会被重复使用的模板.并且在相应的内容区定义能够被模板覆盖的blocks.

 

{% extends 'base.html'%}这句话的意思是告诉模板引擎,这个模板'继承'了另一个模板.当模板系统处理这个模板时,首先它会定位父模板,就会把base.html里面的代码全部copy了过来.然后它会注意base.HTML中的三个block标签,并用子模板中的内容来替换这些block.

转载于:https://www.cnblogs.com/lowen107/p/10224874.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值