django额外参数的传递


path方法:path(route, view, kwargs=None, name=None)

  • path方法可以传递入一个额外参数的字典参数(kwarg),字典里的值就会被传给视图函数。
  • 传入的字典里的key必须在视图函数的参数里,否则会报错。
  • 当字典参数里的key和url捕获的参数一致时,以额外参数(kwargs)里的为准。
     from django.urls import path
    from .views import * urlpatterns = [
    path('index/<pk>/', index, kwargs={'pk': 20,'id': 30,}),
    ]

    传入额外参数

     from django.shortcuts import render, HttpResponse
    
     # Create your views here.
    
     def index(request, pk, id):
    return HttpResponse('你输入的参数是pk:{}-id:{}'.format(pk, id))

    视图函数

     返回结果中输入的pk参数是5,但是默认的kwargs里是20,最终以额外参数里的为准。

url命名


path方法里面最后还有个name参数,默认为None,现在有以下场景:

  • 当访问莫一页面时,需要跳转到另一页面

    from django.shortcuts import render, HttpResponse, redirect
    
    # Create your views here.
    
    def index(request, pk, id):
    return HttpResponse('你输入的参数是pk:{}-id:{}'.format(pk, id)) def show_info(request):
    return HttpResponse('<h1>hello world</h1>') def login(request):
    return redirect('/teacher/info')

    视图函数

     from django.urls import path
    from .views import * urlpatterns = [
    path('index/<pk>/', index, kwargs={'pk': 20,'id': 30,}),
    path('info/', show_info),
    path('login/', login),
    ]

    路由配置

  • 利用django的redirect方法实现页面的跳转,redirect里面传入一个路径的字符串。

         

  • 当访问login的时候,直接给跳转到了info页面。
  • 假设以后info页面的路径发生了改变,当有很多页面都跳向该页面的时候,人为的手动去修改redirect里面的路径会很麻烦。这时候就要用到django的path方法提供的name参数了。
     from django.shortcuts import render, HttpResponse, redirect, reverse
    
     # Create your views here.
    
     def index(request, pk, id):
    return HttpResponse('你输入的参数是pk:{}-id:{}'.format(pk, id)) def show_info(request):
    return HttpResponse('<h1>hello world</h1>') def login(request):
    url = reverse('info')
    return redirect(url)
     from django.urls import path
    from .views import * urlpatterns = [
    path('index/<pk>/', index, kwargs={'pk': 20,'id': 30,}),
    path('info/', show_info, name='info'),
    path('login/', login),
    ]
  • 首先在需要跳转的页面的path方法里面,给该路由命名。加上name='info'。
  • 利用django提供的reverse方法,reverse方法接收一个字符串,该字符串为url的名字。该方法返回该名字的url的路径,再将这个路径重新赋予给redirect实现动态跳转。
  • 当不同的项目app里面拥有相同名称的url时,reverse函数就会发生冲突。django提供了一个app_name的变量来区分不同的app下拥有相同name的路由。
     from django.urls import path
    from .views import * app_name = 'crm' urlpatterns = [
    path('index/<pk>/', index, kwargs={'pk': 20,'id': 30,}),
    path('info/', show_info, name='info'),
    path('login/', login),
    ]
     from django.shortcuts import render, HttpResponse, redirect, reverse
    
     # Create your views here.
    
     def index(request, pk, id):
    return HttpResponse('你输入的参数是pk:{}-id:{}'.format(pk, id)) def show_info(request):
    return HttpResponse('<h1>hello world</h1>') def login(request):
    url = reverse('crm:info')
    return redirect(url)
  • 在app目录下的路由模块(urls.py)中定一个一个app_name的变量,app_name一般为当前app的名字。
  • 在reverse函数里用写上'app名字:路由的名字'(app_name:route_name)来对拥有相同名字的url来进行区分。
    • reverse返回一个url路径字符串
    • reverse传参
      • reverse('app:name', kwargs={params:value})

django额外参数的传递和url命名的更多相关文章

  1. Django 传递额外参数及 URL别名

    传递额外参数到视图函数中 在 urls.py 文件中添加下面内容 from django.conf.urls import url urlpatterns = [ url(r'index', view ...

  2. python 之 Django框架(路由系统、include、命名URL和URL反向解析、命名空间模式)

    12.36 Django的路由系统 基本格式: from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名) ...

  3. Django之url上的include,URL命名和反向解析,命名空间

    include其他的URLconfs   #At any point, your urlpatterns can “include” other URLconf modules. This #esse ...

  4. Django(7)url命名的作用

    前言 为什么我们url需要命名呢?url命名的作用是什么?我们先来看一个案例 案例 我们先在一个Django项目中,创建2个App,前台front和后台cms,然后在各自app下创建urls.py文件 ...

  5. Django路由系统---django重点之url命名分组

    django重点之url命名分组[参数无顺序要求]. settigs.py:增加STATICFILES_DIRS静态资源路径配置,名称为创建的文件夹名称 'DIRS': [os.path.join(B ...

  6. Django路由系统-URL命名&URL反向解析

    命名URL和URL反向解析 前言 起始样式,HTML中的href是写死的,不能更改,如下示例代码: # urls中 urlpatterns = [ url(r'^admin/', admin.site ...

  7. mvc中view与controll之间传递参数时,可以使用url进行传递

    mvc中view与controller之间传递参数时,可以使用url进行传递,但是在url的地址中需要加上“id=123”这样的东西才行. 具体如代码: window.location.href = ...

  8. pyqt信号和槽传递额外参数

    转载:fengyu09 环境:python2.7.8 —— pyqt 4.11.1 使用Pyqt编程过程中,经常会遇到给槽函数传递额外参数的情况.但是信号-槽机制只是指定信号如何连接到槽,信号定义的参 ...

  9. MVC 使用 Webuploader 插件 传递额外参数 备忘笔记

    // 实例化 uploader = WebUploader.create({ pick: { id: '#filePicker-2', label: '点击选择图片' }, formData: { k ...

随机推荐

  1. IOS应用内支付IAP从零开始详解

    前言 什么是IAP,即in-app-purchase 这几天一直在搞ios的应用内购,查了很多博客,发现几乎没有一篇博客可以完整的概括出所有的点,为了防止大伙多次查阅资料,所以写了这一篇博客,希望大家 ...

  2. 枚举类返回Map键值对,绑定到下拉框

    有时候,页面的下拉框要显示键值对,但是不想从数据库取,此时我们可以写一个枚举类, Java后台代码 1.枚举类 import java.util.HashMap; import java.util.M ...

  3. 图解前序遍历线索化二叉树,前序线索二叉树遍历,C\C++描述

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  4. 十. Python基础(10)--装饰器

    十. Python基础(10)--装饰器 1 ● 装饰器 A decorator is a function that take a function as an argument and retur ...

  5. php +apache +mysql 配置笔记

    2013年11月5日 14:27:46 php +apache +mysql 配置笔记 mysql 正常安装 忽略. 1,配置笔记:安装apache 的成功标志是:安装完成之后,在浏览器输入http: ...

  6. dubbo-admin 无法支持JDK1.8

    dubbo-admin 无法支持JDK1.8怎么处理? 1.从git上下载最新源码 https://github.com/alibaba/dubbo 2.编译war包,或直接容器启动

  7. java.util.concurrent ThreadPoolExecutor源码分析

    实现的接口:Executor, ExecutorService 子类:ScheduledThreadPoolExecutor 这类为java线程池的管理和创建,其中封装好的线程池模型在Executor ...

  8. 图片 100%显示. img 全部显示.

    让每个图片 都铺满 ,同样的大小;    只要给 img 设置 固定的高度, 宽度就可以 了. ----------------------- html: <div class="co ...

  9. centos6.6安装hadoop-2.5.0(五、部署过程中的问题解决)

    操作系统:centos6.6 环境:selinux disabled:iptables off:java 1.8.0_131 安装包:hadoop-2.5.0.tar.gz 一.安装过程中会出现WAR ...

  10. C++连接mysql数据库的两种方法

    本文主要介绍了C++连接mysql数据库的两种方法,希望通过本文,能对你有所帮助,一起来看. 现在正做一个接口,通过不同的连接字符串操作不同的数据库.要用到mysql数据库,以前没用过这个数据库,用a ...