1.路由分发 在urls路由中 可使用 include 去匹配 app01下面的 urls 而达到分类的 效果
from django.contrib import admin
from app01 import views
from django.conf.urls import url,include
urlpatterns = [
url(r'admin/', admin.site.urls),
url(r'app01/',include('app01.urls') ,namespace='app01') #相当于分类 先去找app 再找app下的urls
namespace 区分属于那个app
]
2.路由 传参 方向解析 url
from app01 import views
from django.conf.urls import url
urlpatterns = [
url(r'index/', views.show), #1.普通路由
#/home/123/45/
url(r'^home/[0-9]{3}/[0-9]{2}/', views.Cbv.as_view()), #2.CBV模型路由
url(r'^home/([0-9]{3})/[0-9]{2}/$',views.home)
3.括号 相当于把括号类匹配的参数传给 home函数 # 可以删除图书的序号作用
url(r'^home/([0-9]{3})/[0-9]{2}/$',views.home,name='wyc')
]
反向 :reverse 在有 url(r'^home/([0-9]{3})/[0-9]{2}/$',views.home,name='wyc') 这个url对应的地方都可以通过reverse 拿到地址
1. view中revers('wyc') 返回一个str 就是name=''前对应的 url
2.html a 标签中 {%url 'wyc '%} 使用
3.revers('wyc' ,args=(12,23)) 参数用法 把参数传入到 正则表达式的括号中 或 {%url 'wyc ' '2009' '12' %}
3.先指定一个默认值 在使用urls传参
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^blog/$', views.page),
url(r'^blog/page(?P<num>[0-9]+)/$', views.page),
]
# views.py中,可以为num指定默认值
def page(request, num="1"):
pass
2.删除功能三合一
url(r'^delete_(press|book|author)/(\d+)/$', views.delete),
url(r'^press_list/$', views.press_list,name='press'),
url(r'^book_list/$', views.jilei,name='book'),
url(r'^author_list/$', views.author_list,name='author'),
def delete(request, table, del_id):
# table_dict = {
# 'press':Press,
# 'book':Book,
# 'author':Author,
# }
# table_class = table_dict.get(table)
table_class = getattr(models, table.capitalize()) 第一个字母大写 其他小写 通过str反射拿到类
table_class.objects.get(id=del_id).delete()
return redirect(reverse(table)) 利用reverse 反向拿到对应 name 的重定向url
1.当点击页面上的 删除按钮时 <a href="/delete_book/{{ i.id }}"> 拿到 id值 去匹配url中的 三个类型的删除
2. 路由 把 'book' 'id' 当作参数传给 delete 函数
3. Book 通过反射 拿到 models 中 的类 对象
4.删除操作完后 重定向 : 通过reverse( 'book') 反向解析 url中的 name= ' book' 拿到重定向的 url