django额外参数的传递和url命名

django额外参数的传递



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

  • path方法可以传递入一个额外参数的字典参数(kwarg),字典里的值就会被传给视图函数。
  • 传入的字典里的key必须在视图函数的参数里,否则会报错。
  • 当字典参数里的key和url捕获的参数一致时,以额外参数(kwargs)里的为准。

    1 from django.urls import path
    2 from .views import *
    3
    4 urlpatterns = [
    5     path(‘index/<pk>/‘, index, kwargs={‘pk‘: 20,‘id‘: 30,}),
    6 ]

    传入额外参数

    1 from django.shortcuts import render, HttpResponse
    2
    3 # Create your views here.
    4
    5
    6 def index(request, pk, id):
    7     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‘)

    视图函数

    1 from django.urls import path
    2 from .views import *
    3
    4 urlpatterns = [
    5     path(‘index/<pk>/‘, index, kwargs={‘pk‘: 20,‘id‘: 30,}),
    6     path(‘info/‘, show_info),
    7     path(‘login/‘, login),
    8 ]

    路由配置

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

         

  • 当访问login的时候,直接给跳转到了info页面。
  • 假设以后info页面的路径发生了改变,当有很多页面都跳向该页面的时候,人为的手动去修改redirect里面的路径会很麻烦。这时候就要用到django的path方法提供的name参数了。

     1 from django.shortcuts import render, HttpResponse, redirect, reverse
     2
     3 # Create your views here.
     4
     5
     6 def index(request, pk, id):
     7     return HttpResponse(‘你输入的参数是pk:{}-id:{}‘.format(pk, id))
     8
     9
    10 def show_info(request):
    11     return HttpResponse(‘<h1>hello world</h1>‘)
    12
    13
    14 def login(request):
    15     url = reverse(‘info‘)
    16     return redirect(url)
    1 from django.urls import path
    2 from .views import *
    3
    4 urlpatterns = [
    5     path(‘index/<pk>/‘, index, kwargs={‘pk‘: 20,‘id‘: 30,}),
    6     path(‘info/‘, show_info, name=‘info‘),
    7     path(‘login/‘, login),
    8 ]
  • 首先在需要跳转的页面的path方法里面,给该路由命名。加上name=‘info‘。
  • 利用django提供的reverse方法,reverse方法接收一个字符串,该字符串为url的名字。该方法返回该名字的url的路径,再将这个路径重新赋予给redirect实现动态跳转。
  • 当不同的项目app里面拥有相同名称的url时,reverse函数就会发生冲突。django提供了一个app_name的变量来区分不同的app下拥有相同name的路由。

     1 from django.urls import path
     2 from .views import *
     3
     4 app_name = ‘crm‘
     5
     6
     7 urlpatterns = [
     8     path(‘index/<pk>/‘, index, kwargs={‘pk‘: 20,‘id‘: 30,}),
     9     path(‘info/‘, show_info, name=‘info‘),
    10     path(‘login/‘, login),
    11 ]
     1 from django.shortcuts import render, HttpResponse, redirect, reverse
     2
     3 # Create your views here.
     4
     5
     6 def index(request, pk, id):
     7     return HttpResponse(‘你输入的参数是pk:{}-id:{}‘.format(pk, id))
     8
     9
    10 def show_info(request):
    11     return HttpResponse(‘<h1>hello world</h1>‘)
    12
    13
    14 def login(request):
    15     url = reverse(‘crm:info‘)
    16     return redirect(url)
  • 在app目录下的路由模块(urls.py)中定一个一个app_name的变量,app_name一般为当前app的名字。
  • 在reverse函数里用写上‘app名字:路由的名字‘(app_name:route_name)来对拥有相同名字的url来进行区分。

原文地址:https://www.cnblogs.com/ivy-blogs/p/10647643.html

时间: 2024-10-16 02:41:43

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

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

12.36 Django的路由系统 基本格式: from django.conf.urls import url urlpatterns = [ url(正则表达式, views视图函数,参数,别名), ] ? 正则表达式: 一个正则表达式字符串 views视图函数:一个可调用对象,通常为一个视图函数或一个指定视图函数路径的字符串 参数: 可选的要传递给视图函数的默认参数(字典形式) 别名: 一个可选的name参数 12.361 路由正则表达式 from django.conf.urls imp

django 带参数的 url

url就像筋络一样把django这个大框架的各个部分紧紧的连接成一个整体,所以要了解django从url开始是一个不错的方向. 一般的view template url的关系这里就不讲了,下面会详细介绍下在url中参数的传递的例子. 1.  简单的参数调用 url(r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'), 对于上面的url,如果用   /articles/2005/03/  来解析,最后就会解析到view到 news

Django之url上的include,URL命名和反向解析,命名空间 以及图书管理系统删除功能二合一方法

include其他的URLconfs #At any point, your urlpatterns can "include" other URLconf modules. This #essentially "roots" a set of URLs below other ones. #For example, here's an excerpt of the URLconf for the Django website itself. #It include

如何在url地址栏中直接写数组参数进行传递

今天博主遇到这样一个问题,就是如何在浏览器url地址栏中直接写入数组参数进行传递,问了身边几个同事,都没有找到成功的书写方法.就开始怀疑是否可以在地址栏中直接写入数组进行传递.开始在谷歌,百度进行搜索查询,也是同样没有找到有用的信息. 也许,大家很少遇到这样的情况. 就这样,我自己开始慢慢的尝试书写,将自己熟悉的几种方式全部都试了一遍,依然传递不对.最后在无意情况下,不小心将参数多复制了一个,点击回车,竟然传递成功了,还是数组结果.瞬间成就满满,虽然只是一个简单小应用. 特此,写一贴给广大博友分

pyqt信号和槽传递额外参数

环境: python2.7.8 pyqt 4.11.1 使用Pyqt编程过程中,经常会遇到给槽函数传递额外参数的情况.但是信号-槽机制只是指定信号如何连接到槽,信号定义的参数被传递给槽,而额外的参数(用户定义)不能直接传递. 而传递额外参数又是很有用处.你可能使用一个槽处理多个组件的信号,有时要传递额外的信息. 一种方法是使用lambda表达式. from PyQt4.QtCore import * from PyQt4.QtGui import * class MyForm(QMainWind

&lt;笔记&gt;TP5的分页传递额外参数

默认生成的分页只有page一个参数,若需要提供额外的参数才能访问分页(例如查询结果的分页,需要传入查询关键字的参数才能显示结果),则需要设置额外参数query

django book学习笔记——视图和URL配置

1.视图 一个视图就是Python的一个函数,每个视图函数至少要有一个参数,通常被叫作request. 这是一个触发这个视图.包含当前Web请求信息的对象,是类django.http.HttpRequest的一个实例.它返回一个HttpResponse实例.为了使一个Python的函数成为一个Django可识别的视图,它必须满足这两个条件.(也有例外) 例: from django.http import HttpResponse def hello(request):         retu

window.open() 参数post传递

在实际项目中,常常遇到这样的需求,即实现子系统页面之间跳转并在新的页面打开,我所在项目组使用的是SSH框架,所以url均为类似****.action,同时还带有两参数(系统ID与系统名称),两个参数被struts拦截后存入session中,在打开的子系统页面中还有个ztree插件实现的树状菜单需要参数系统ID才能初始化,直接使用window.open(url,"_blank"),会使得url长度过长,同时还暴露一些参数.故想改用post方式提交,隐藏提交过程中参数的传递.首先想到aja

ajax_封装函数_升级_传递多个参数和传递一个参数

HTML: <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>title</title> </head> <body> <h2>测试工具函数</h2> <input class='get' type="button" value