首页
学习
活动
专区
圈层
工具
发布

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

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

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

举报
领券