前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django中的url与视图详解(3)

Django中的url与视图详解(3)

作者头像
xbhog
发布2019-09-08 14:32:12
1.4K0
发布2019-09-08 14:32:12
举报
文章被收录于专栏:开发技能乱炖开发技能乱炖

Django中的url与视图详解(3)

可能你学习到这里,感觉好乱,所将的知识点没有一丝的关联,这个是没有办法的,DjangoFlask有所不同的,Django是结构化的,每个模块都有知识点,我们只有先了解、学会了才能在后面的项目中游刃有余,坚持,话不多说,请看见天的操作。

reverse函数(反转):

如果在反转url的时候,需要添加参数,那么可以传递kwargs参数到revers函数中。示例代码如下:

代码语言:javascript
复制
detail_url = reverse('detail',kwargs={"article_id":1,'page':2})

如果想要添加查询字符串的参数,则必须手动的进行拼接。示例代码如下:

代码语言:javascript
复制
login_url = reverse('login') + "?next=/"

自定义URL转换器:

在前面如果认真看的话,我粗略的讲过URL转换器的参数,包括int、uuid等,现在我们来盘它了。

有时候内置的URL转换器不能实现我们的需求,因此,Django很人性化的给我们一个接口让我们自己定义URL转换器。

自定义url转换器按照以下五个步骤来走就可以了:

  1. 定义一个类,直接继承自object就可以了。
  2. 在类中定义一个属性regex,这个属性是用来限制URL转换器规则的正则表达式。
  3. 实现to_python(self,value)方法,这个方法是将URL中的值转换一下,然后传给视图函数的。
  4. 实现to_url(self,value)方法,这个方法是在做URL反转的时候,将传进来的参数转换后拼接成一个正确的URL。 5. 将定义好的转换器,使用django.urls.converters.register_converter方法注册到Django中。

示例代码如下:

代码语言:javascript
复制
from django.urls import register_converter

class CategoryConverter(object):
    regex = r'\w+|(\w+\+\w+)+'

    def to_python(self,value):
        # python+django+flask
        # ['python','django','flask']
        result = value.split("+")
        return result

    def to_url(self,value):
        # value:['python','django','flask']
        # python+django+flask
        if isinstance(value,list):
            result = "+".join(value)
            return result
        else:
            raise RuntimeError("转换url的时候,分类参数必须为列表!")

register_converter(CategoryConverter,'cate')

URL映射默认参数:

使用path或者是re_path的后,在route中都可以包含参数,而有时候想指定默认的参数,这时候可以通过以下方式来完成。

代码语言:javascript
复制
from django.urls import path

from . import views

urlpatterns = [
    path('blog/', views.page),
    path('blog/page<int:num>/', views.page),
]

# View (in blog/views.py)
def page(request, num=1):
    pass
    ...

解释:

当在访问blog/的时候,因为没有传递num参数,所以会匹配到第一个URL,这时候就执行view.page这个视图函数,而在page函数中,又有num=1这个默认参数。因此这时候就可以不用传递参数。而如果访问blog/1的时候,因为在传递参数的时候传递了num,因此会匹配到第二个URL,这时候也会执行views.page,然后把传递进来的参数传给page函数中的num

鸡汤:学习不是三分钟的热血,而是一辈子所为之努力的,加油吧,骚年!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年07月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Django中的url与视图详解(3)
    • reverse函数(反转):
      • 自定义URL转换器:
        • URL映射默认参数:
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档