在写django的时候,html中反向解析经常会用到app_name 但有时候又是namespace,具体的区别如下:
大部分情况 这两者有其一就可以了。 并且两者(可以简化理解)无区别
只要一种情况 比如 访问
path('book1/', include('book.urls')), path('book2/', include('book.urls')),
这种情况下(访问不通的url 但是执行的是一个app ,并且走一个方法或者类),必须用appname来区分,这时候用app_name就无法区分了!!
以下测试实例来自 https://blog.51cto.com/jiajinh/2432449
-
在多个app之间,有可能产生同名的url,这个时候避免反转url的时候混淆,可以使用应用命名空间做区分。应用命名空间使用。在应用url中定义 app_name;
- 一个app,可以创建多个url映射到一个app中,所以就会产生一个问题,在做反转的时候,如果不使用命名空间,就会混淆,为了避免这个问题。我们可以使用实例命名空间。在include函数中添加namespace即可;
下面通过两个案例说明
一: 场景1,不同应用中的命名空间
(1)新建app应用
#python manage.py startapp app01 #python manage.py startapp app02
(2)主URL配置
from django.contrib import admin from django.conf.urls import url, include from django.urls import path urlpatterns = [ path('admin/', admin.site.urls), path('app01/', include('app01.urls')), path('app02/', include('app02.urls')), ]
(2)app01配置 project_django/app01/urls.py
from django.urls import path from . import views urlpatterns = [ path('', views.index,name='index'), path('login', views.login,name='login'), ]
(3)app01配置 project_django/app01/views.py
from django.http import HttpResponse from django.shortcuts import render from django.shortcuts import redirect,reverse # Create your views here. def index(request): if request.GET.get("username"):