django学习框架之3:URL路由反转传递参数,指定默认参数

  • 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/',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('',views.index),
]

这里会在路由中指定两个,一个是传递参数的就使用第二个路由path('',views.index),,不传递的就使用第一个路由path(' ',views.index),
注意写代码时,路由后面的逗号必须添加
最后,在添加新的蓝图后,需要将新的路由加入到总的路由之中

你可能感兴趣的:(django框架,django)