前言:
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')