Django 2 url逆向解析

前言:

URL命名空间包括两个部分:

  • app_name ( 应用命名空间 )
  • namespace ( 实例命名空间 )

一个视图(view)往往对应多个url地址.

在django中实现反向解析URL必备条件就是 url和view能一对一 的匹配.

(通过view找到唯一一个对应的url,通过url也能找到唯一一个view)

最 简单的方式 就是使用 name ,可以理解为url起了一个名字.

应用stu中的urls.py

#coding=utf-8

from django.urls import path,re_path
from stu import views

app_name = 'stu'
urlpatterns = [
    path('',views.index_view),
    re_path(r'^year/$',views.index_view1,name='p'),
    re_path(r'^year/(\d{4})/$',views.index_view2,name='w'),
    # 通过访问 http://127.0.0.1:8000/student/years/ 重定向到 http://127.0.0.1:8000/student/year/2020/
    path('years/',views.index_view3)
]

视图文件

from django.http import HttpResponse,HttpResponseRedirect
from django.shortcuts import render

# Create your views here.
from django.urls import reverse


def index_view(request):
	# 渲染到页面
    return render(request, "index_view.html")


def index_view1(request):
    return HttpResponse('hello 1')


def index_view2(request,num):
    return HttpResponse('hello 2 num=%s'%num)


def index_view3(request):
    # 重定向
    return HttpResponseRedirect(reverse('w',args=(2020,)))

方法一

*未使用命名空间的情况*

<a href="{% url 'p' %}">链接到index_view1
				↓
re_path(r'^year/$',views.index_view1,name='p')def index_view1(request):
    return HttpResponse('hello 1')

最后的网页效果:
在这里插入图片描述

方法二:

切记:urls.py添加 应用命名空间app_name = ‘stu’


# 通过访问 http://127.0.0.1:8000/student/years/ 重定向到 http://127.0.0.1:8000/student/year/2020/
    path('years/',views.index_view3)def index_view3(request):
    # 重定向
    return HttpResponseRedirect(reverse('stu:w',args=(2020,)))
    									↓
re_path(r'^year/(\d{4})/$',views.index_view2,name='w')def index_view2(request,num):
						    return HttpResponse('hello 2 num=%s'%num)

最终网页效果

在这里插入图片描述
在这里插入图片描述

方法三

设置应用命名空间app_name = 'stu’后,写法如下:

<a href="{% url 'stu:p' %}">链接到index_view1</a>
		↓↓↓
re_path(r'^year/$',views.index_view1,name='p')
		↓↓↓
def index_view1(request):
    return HttpResponse('hello 1')

点击查看更多

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值