- URL反转传递参数:
URL反转:reverse:
反转路由信息:因为django中的reverse反转url的时候不区分GET请求和POST请求,因此不能在反转的时候添加查询字符串的参数。如果想要添加查询字符串的参数,只能手动的添加。
重定向时要
可以用于在重定向前,用作将指定的路由进行反转和拼接,拼接时使用的参数通过kwargs传递
例子:
cms.views中定义index函数,进行相关的反转
def index(request):
name = request.GET.get('name')
if name:
return HttpResponse('后台首页')
else:
# return redirect('login/')
# return redirect('cms:login')
return redirect(reverse('cms:news',kwargs={'news_id':1}))
# 测试两种方式:字符串拼接和在重定向中传递参数,发现不行,因为返回的是路由,要加入的话需要在reverse中加入,要在反转后再加入会出问题,不能识别这个news_id,重定向不具备识别news_id的功能
def news(request,news_id):
return HttpResponse('新闻是%s' %news_id)
cms.urls
from django.urls import path
from . import views
app_name = 'cms'
# 命名空间 app_name是唯一的,这就代表这个app的名称
urlpatterns = [
path('',views.index),
# path('login/',views.login),
path('sign/',views.login,name='login'),
path('news/<news_id>',views.news,name='news'),
]
- URL指定默认参数
比如对于一个视图news.views,代码如下:
from django.shortcuts import render,redirect,reverse
from django.http import HttpResponse
# Create your views here.
def index(request,page=1):
return HttpResponse('新闻第%s篇' % page)
其中就指定了page=1为默认的参数,
在news.urls中调用的方式:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index),
path('<page>',views.index),
]
这里会在路由中指定两个,一个是传递参数的就使用第二个路由path('<page>',views.index),
,不传递的就使用第一个路由path(' ',views.index),
注意写代码时,路由后面的逗号必须添加
最后,在添加新的蓝图后,需要将新的路由加入到总的路由之中