Django的urls.py中的app_name有什么作用? [英] What is the purpose of app_name in urls.py in Django?

查看:19
本文介绍了Django的urls.py中的app_name有什么作用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

include()将urlconf从Django应用程序发送到项目的urls.py时,应将某种应用程序的名称(或命名空间)指定为:

  • app_namespaceinclude((pattern_list, app_namespace), namespace=None)在Mainurls.py

  • 应用程序的urls.py中的app_name变量。

因为我想是Django 2,所以第二种方法是首选方法,尽管我从Django 3文档复制粘贴了第一个函数签名。但这不是重点。

我目前对include()namespace参数的理解是我在使用reverse()时使用它。

APP的urls.py中的app_name或Main中的app_namespace有什么作用?
这些是完全一样的东西吗?
Django如何使用它?

我在此处找到的现有问题(和答案)解释了我应该如何指定它,而不是为什么。

推荐答案

在此答案中,我使用DRF package及其URL patterns。如果要尝试此答案中提到的任何代码段,您必须安装(pip install djangorestframework)并将rest_framework添加到INSTALLED_APPS列表中。


应用程序命名空间可以通过两种方式设置[Ref:Django doc]

  1. urls.py中使用app_name变量。

    您可以看到DRF已经在urls.py中设置了app_name。仅当模块引用包含模式时,Django才会将此app_name用作应用程序命名空间

    include(module, namespace=None)

    示例:

    urlpatterns = [  
     path('drf-auth/bare/', include('rest_framework.urls')),  
    ]
  2. include((pattern_list, app_namespace), namespace=None)函数中使用app_namespace参数。

    在此方法中,您可以根据需要为应用程序设置其他app_namespace

    最重要的是,我们传递的是模式列表而不是模块

    示例:

    from rest_framework.urls import urlpatterns as drf_urlpatterns
    
    urlpatterns = [  
       path('drf-auth/foo/', include((drf_urlpatterns, 'foo-app-namespace'))),  
    ]
    

完整示例

from django.urls import path, include, reverse  
from rest_framework.urls import urlpatterns as drf_urlpatterns  
  
urlpatterns = [  
  path('drf-auth/bare/', include('rest_framework.urls')),  
  path('drf-auth/foo/', include((drf_urlpatterns, 'foo-app-namespace'))),  
  path('drf-auth/bar/', include((drf_urlpatterns, 'bar-app-namespace'))),  
]  

print(reverse('rest_framework:login'))
print(reverse('foo-app-namespace:login'))
print(reverse('bar-app-namespace:login'))

#results
/drf-auth/bare/login/
/drf-auth/foo/login/
/drf-auth/bar/login/

  1. APP的urls.py中的app_name或Main中的app_namespace有什么作用?

两者都用于设置应用程序命名空间。如果在urls.py中定义,app_name可以用作默认应用程序命名空间。

  1. 这两件事完全一样吗?

  1. Django如何使用它?

应用程序命名空间实例命名空间用于检索URL路径。在Django中,无论何时执行reverse(...)函数,Django都会首先查找应用程序命名空间。您可以在这里阅读有关Django如何解析URL的更多信息,Reversing namespaced URLs

这篇关于Django的urls.py中的app_name有什么作用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆