在项目变大以后,经常不会把所有的url
匹配规则都放在项目的urls.py
文件中,而是每个app
都有自己的urls.py
文件,在这个文件中存储的都是当前这个app
的所有url
匹配规则。然后再统一注册到项目的urls.py
文件中。include
函数有多种用法,这里讲下两种常用的用法。
创建一个movie app测试
python manage.py startapp movie
在movie中创建urls.py
并在其中添加代码
from django.urls import path
from . import views
urlpatterns = [
path('list',views.movie_list,name='movie_list'),
path('detail/<int:movie_id>',views.movie_detail,name='movie_detail'),
]
在组urls.py中创建包含movie urls的path
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('book',views.book_detail_query_string),
path('book/<int:book_id>',views.book_detail_path),
path('book/slug/<slug:book_id>',views.book_detail_path,name="book_slug"),
path('book/path/<path:book_id>',views.book_detail_path,name="book_path"),
path('movie/',include("movie.urls"))
]
在movie views.py中创建视图函数
from django.shortcuts import render,HttpResponse
def movie_list(request):
return HttpResponse("电影列表")
def movie_detail(request,movie_id):
return HttpResponse(f"你访问的movie_id是:{movie_id}")
访问测试
http://127.0.0.1:8000/movie/list
http://127.0.0.1:8000/movie/detail/1
指定应用名称(应用命名空间)
在movie urls.py中创建app_name
from django.urls import path
from . import views
app_name = "movie"
urlpatterns = [
path('list',views.movie_list,name='movie_list'),
path('detail/<int:movie_id>',views.movie_detail,name='movie_detail'),
]
这样添加可以避免,urlpatterns中定义的name,和其他urlpatterns中的name名称冲突