创建应用app1,新建一个路径index,修改urls.py文件
from django.contrib import admin
from django.urls import path
from app1 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index),
]
新建index视图函数
from django.shortcuts import render, HttpResponse
# create your views here
def index(request):
return HttpResponse('INDEX')
访问首页:
网页显示效果如下:
访问这种路径http://127.0.0.1:8000/index/xiao ,网页提示404错误。
path相当于在路径里自动加上了^和$,如果要使用其他的正则匹配,可以使用re_path
如果想要网页加上路径,动态显示年份,怎么做呢?
这个时候,需要用到正则分组。当re_path检测到分组时,会将分组的值传给视图函数
如果是无名分组,则作为位置参数传入;如果是有名分组,作为关键字参数传入
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
# path('index/', views.index),
re_path('^index/$', views.index), # index(request)
re_path(r'^articles/2003/$', views.special_year), # special_year(request)
re_path(r'^articles/(\d{4})/$', views.article_year), # article_year(request,分组匹配的值)
]
views.py
def article_year(request,year):
return HttpResponse(year)
访问url:http://127.0.0.1:8000/articles/2080/
网页效果如下:
新增url,获取月份,修改urls.py
urlpatterns = [
path('admin/', admin.site.urls),
# path('index/', views.index),
re_path('^index/$', views.index), # index(request)
re_path(r'^articles/2003/$', views.special_year), # special_year(request)
re_path(r'^articles/(\d{4})/$', views.article_year), # article_year(request,分组匹配的值)
re_path(r'^articles/(\d{4})/(\d{2})/$', views.article_month), # article_month(request,value1,value2)
]
新增article_month视图函数,它必须接收2个额外的参数,否则报错
def article_month(request,year,month):
return HttpResponse('{}-{}'.format(year,month))
访问url:http://127.0.0.1:8000/articles/2080/10/
网页效果如下:
访问url:http://127.0.0.1:8000
网页提示404
这样用户体验不好,怎么办呢?在index下面,加入以下的url规则
re_path('^$', views.index)
再次访问页面,输出:
一个Django项目里有多个APP,共用一个url容易造成混淆,且不便于维护,一个APP的url出现问题可能造成整个url.py文件的崩溃,因此可以通过路由分发让每个APP拥有自己单独的url,方便后续的维护管理
url.py里面的说明
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
在urls.py导入include
from django.urls import path,re_path,include
在app1的目录下创建urls.py,将urls.py的内容复制过去,修改
from django.contrib import admin
from django.urls import path,re_path,include
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index),
re_path('^$', views.index),
re_path('^index/$', views.index), # index(request)
path('app1/', include('app1.urls')), # 表示把app1/下面的url都分发给app1.urls这个文件处理
]
再访问http://127.0.0.1:8000/index/,提示404
因为路由分发了,访问时,必须加上应用名http://127.0.0.1:8000/app1/index/
再增加一个应用app2,总的代码如下:
总的urls.py
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('app1/', include('app1.urls')), # 表示把app1/下面的url都分发给app1.urls这个文件处理
path('app2/', include('app2.urls')), # 表示把app2/下面的url都分发给app2.urls这个文件处理
]
app1下面的urls.py
from django.contrib import admin
from django.urls import path,include
from app1 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index),
]
app2下面的urls.py
from django.contrib import admin
from django.urls import path,include
from app2 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index),
]
app1下面的views.py
from django.shortcuts import HttpResponse
# Create your views here.
def index(request):
return HttpResponse('index in app1')
app2下面的views.py
from django.shortcuts import HttpResponse
# Create your views here.
def index(request):
return HttpResponse('index in app2')
解耦
,便于管理原文:https://www.cnblogs.com/zzliu/p/10588456.html