我引用https://www.webforefront.com/django/namedjangourls.html来理解django urlconfs,我遇到过示例名称空间和应用程序名称空间,我知道urlsconfs中的名称空间,但我不知道它们之间的区别。
我参考了django文档,它提到了示例和应用命名空间,当同一个应用的多个示例在django项目中使用时,就会出现这种情况。
但是我还是不明白,我已经在谷歌上搜索过了,但是没有找到任何帮助。
先谢了。
我引用https://www.webforefront.com/django/namedjangourls.html来理解django urlconfs,我遇到过示例名称空间和应用程序名称空间,我知道urlsconfs中的名称空间,但我不知道它们之间的区别。
我参考了django文档,它提到了示例和应用命名空间,当同一个应用的多个示例在django项目中使用时,就会出现这种情况。
但是我还是不明白,我已经在谷歌上搜索过了,但是没有找到任何帮助。
先谢了。
5条答案
按热度按时间rjjhvcjd1#
将示例名称空间视为昵称,将应用程序名称空间视为真名。
人们可以给你起很多绰号,但你的真名不会变。
Django使用应用程序名称空间(你的真实姓名)来反转url,因为作为一个应用程序,你不应该关心有多少示例名称空间(昵称)。
但是为了区分一个示例和下一个示例,您将在urlconfs中使用示例名称空间(昵称)。
假设您的应用处理客户和商店员工,这两个人都有实际地址,您可能希望使用只处理所有地址信息的应用:表单、验证、模型结构、地理位置等。我们虚构的应用程序是一个可重用的django应用程序,名为"django_super_address"。
您的根url conf可能如下所示:
这包括不同URL路径下的相同URL,指向相同的应用程序,使用不同的命名空间(昵称)。
在
django_super_address
中,它定义了它的应用程序命名空间:在视图中,它使用:
当Django获得URL '/employee/address/create/'时:
1.它将示例名称空间设置为
employee_address
1.它从
django_super_address
读取url1.它将应用程序命名空间设置为
django_super_address
,并将www.example.com与该应用程序命名空间相关联。 urls.py with that application namespace.在视图中:
1.它通过查看与应用程序命名空间(真实名称)关联的urls文件来反转URL,并将名称反转为:
create/success
1.然后,它返回到链中,现在使用示例名称空间(昵称)将url的其余部分放在前面:x1米5纳米1 x + x1米6纳米1 x + x1米7纳米1 x = x1米8纳米1 x
现在你知道了:昵称为urlconfs和应用程序命名空间为反向!
t98cgbkg2#
据我了解,事情是这样的:
示例名称空间的应用听起来可能有点混乱。让我试着澄清一下。考虑一下Django文档中给出的例子。
urls.py:
民意调查/www.example.comurls.py:
命名空间的定义如下:
app_name
属性定义urls.pynamespace
参数定义在这里,
author-polls
和publisher-polls
都使用相同的polls.urls
来解析它们的URL。如果没有示例名称空间,解析像**'polls:index'**这样的URL可能会混淆它要获取的URL。这就是为什么Django定义了一组协议来解决这个问题,以解决当你试图反转和解析名称空间URL时的各种情况。hs1ihplo3#
您可以通过将www.example.com包含在不同的URL路径中来将其用于应用程序,例如,我们可以具有:urls.py for an app by including it in different urls path, for example we can have:
如您所见,两者都包含polls. url,这是:
到目前为止一切顺利!
但是有一个问题。在模板中,"polls:index"指向哪里?!现在示例名称空间出现了。
Django有一些规则来反转名称空间的url〉〉www.example.comhttps://docs.djangoproject.com/en/3.0/topics/http/urls/#reversing-namespaced-urls
bzzcjhmw4#
基本上,每个应用程序命名空间可以具有多个示例命名空间,例如:
这是项目URL文件(主URL):
你可以看到,他们都提到了相同的app. urls文件(movie_app. urls),但路径链接不同。
第一个是:"",
第二个是"我的名称空间1/",
第三是:"我的名称空间2/",
这是movie_app. urls文件(子文件):
现在当你在你的html模板中使用所有路径时,例如:
您将注意到href链接中的不同之处:
最后:
应用命名空间和示例命名空间将帮助您从使用同一include. urls文件的多个URL路径中确定/选择正确的URL路径。
我希望这对你有帮助。
ugmeyewa5#
命名空间示例只能和include一起使用,当我们想要多个路径有不同的URL,但又想包含相同的URLconf模块时,这是很有用的。
假设我们有这样的代码:
点击链接会将我们重定向到url1/words,因为Django会从urlpatterns中选择第一个元素。如果我们想被重定向到url2/words,我们必须使用名称空间(示例名称空间),即:
然后:
我要补充的是,如果我们没有示例名称空间,Django可能会警告我们:
警告:?:(urls.W005)URL命名空间"english"不是唯一的。您可能无法反转此命名空间中的所有URL
通常,示例命名空间在以下情况下很有用,例如:
这并不局限于不同的URL,即使我们使用相同的视图,我们也可以根据我们所使用的URL对其进行轻微的修改:
例如,我们可以更改上下文或选择不同的模板。