URL正则表达式及分组命名
-
使用正则和不使用正则匹配相同
re_path(r'^index/',views.index) def index(request): return render(request, 'index.html')
-
匹配空路径
-
分组匹配
re_path(r'^index2/(\d+)/',views.index2) #url传递参数,路径:http://127.0.0.1:8000/app01/index2/1 ('1'传给了page) def index2(request, page): print(page, type(page)) # 1<class 'str' >传递过来的类型是字符串 return render(request, 'index.html')
-
分组命名匹配
#url分组命名传递参数,路径http://127.0.0.1:8000/app01/index/1/,只是路由函数的名称必须和组名相同,即page相同url(r'^index3/(?P<page>\d+)/$', views.index3) def index3(request, page): return render(request, 'index.html')
同样 page可以给个默认值,即函数中定义page = '1’也是可以的
URL 反向代理
在使用 Django 项目时,一个常见的需求是获得URL的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等)。
人们强烈希望不要硬编码这些URL(费力、不可扩展且容易产生错误)
我们可以使用name属性进行反向代理
path('app1/',include('app1.urls'))
#这条是主路由,用来指向子路由
path('index5/' ,views.index5, name = 'xxx')
#这条为子路由,这里的name相当于一个标识 用来识别这条url
#views中
def index5(request):
return render(request, 'index5.html')
#html中
<a href="/app1/index4/">点我到index4</a>
<br>
<a href="{% url 'xxx' %}">点我到index5</a>
#这里URL代表当前的路由即app1,因此点击会直接跳转到主路由app1,然后去众多子路由中寻找name = 'xxx'的子路由,然后执行他的路由/index5/,视图函数,返回html。因此这里如果要改应用app1的名字,只需要修改主路由就可以了!!!