1.位置分组
1.写在url里面的:
# 删除 url(r'^del_class/(d+)',views.del_class),
2.写在html里面的:
<a class="btn btn-danger btn-sm" href="/del_class/{{ i.pk }}/">删除</a>
3.写在视图函数里面的:
def del_class(request,pk):#在request后面写传进来的参数 可以设置默认值 if not models.ClassTable.objects.filter(pk=pk): return HttpResponse('数据不存在') models.ClassTable.objects.get(pk=pk).delete() return redirect('/class_list/')
2命名分组:
# 删除 url(r'^del_class/(?P<pk>d+)',views.del_class),
捕获的参数永远都是字符串
参数说明:
- 正则表达式:一个正则表达式字符串
- views视图:一个可调用对象,通常为一个视图函数
- 参数:可选的要传递给视图函数的默认参数(字典形式)
- 别名:一个可选的name参数
注意:
Django 2.0版本中的路由系统是下面的写法(官方文档):
from django.urls import path,re_path urlpatterns = [ path('articles/2003/', views.special_case_2003), path('articles/<int:year>/', views.year_archive), path('articles/<int:year>/<int:month>/', views.month_archive), path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail), ]
3.
把urls.py放到app里面,
项目里的urls 导入app里面的urls.py
from django.conf.urls import url,include#印可肉的 from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'app01/',include('app01.urls')) ] 多个app上面可以额外的写前缀
4.
给url起别名:
1.普通url
# 删除 url(r'^del_class/(?P<pk>d+)',views.del_class,name='bieming' ),
通过url的名字反向解析拿出rul的东西
2.使用
在视图函数里引入模块 用reverse 拿出来的是字符串类型的
from django.urls import reverse
reverse('别名') #
模板中使用: 如果有命名分组的话,要给命名分组传值
<a class="btn btn-danger btn-sm" href="{% url 'bieming' i.pk %}">删除</a>
url(r'app01/',include('app01.urls',namespace='app01')), url(r'app02/',include('app02.urls',namespace='app02'))
app里面的
url(r'^home/$', views.home, name='home'), # app01
视图:
reverse(’app01:home‘) ——》 /app01/home/
reverse(’app02:home‘) ——》 /app02/home/
模板:
{% url 'app01:home' %} —》 /app01/home/