gpt4 book ai didi

python - 有没有办法在 django 中为两个或多个应用程序设置 url 命名空间?

转载 作者:行者123 更新时间:2023-12-04 17:00:28 25 4
gpt4 key购买 nike

我想要做的是为两个或更多应用程序拥有公共(public)命名空间。

假设我的项目中有两个应用程序。他们每个人都有一个用于公共(public)和管理的 url 模块。结构如下所示:

|-- app1
| |-- views
| |-- models
| |-- urls
| | |-- __init__.py
| | |-- public.py
| | |-- administration.py
|-- app2
| |-- views
| |-- models
| |-- urls
| | |-- __init__.py
| | |-- public.py
| | |-- administration.py

然后我希望这些 urls 模块包含并设置公共(public) url 和管理 url 的公共(public)命名空间:
urlpatterns = patterns('',

url(r'^administration/', include('app1.urls.administration', namespace="administration")),
url(r'^administration/', include('app2.urls.administration', namespace="administration")),

url(r'^', include('app1.urls.public', namespace="public")),
url(r'^', include('app2.urls.public', namespace="public")),

)

这一切都很好,但 reverse方法不太正确。似乎,一旦我为应用程序声明了一些命名空间,就无法向该命名空间添加更多模式。所以反向返回匹配来自 app1 的 url ,但似乎没有找到来自 app2 的网址.
> reverse("administration:app1_url") 
/administration/app1/url/
> reverse("administration:app2_url")
*** NoReverseMatch: Reverse for 'app2_url' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

有什么办法吗?

我需要这个,因为我在公共(public)和管理中的 url 具有相同的名称,并且当有一种方法可以命名它们时,我不想为它们添加前缀。

最佳答案

admin_patterns = patterns('',
url(r'^', include('app1.urls.administration'),
url(r'^', include('app2.urls.administration'),
)
urlpatterns = patterns('',
url(r'^administration/', include(admin_patterns, namespace="administration")),
)

这是你想要做的吗?当然,这里的问题是来自 app1 的任何网址之前会解决 app2因此,如果您在两个应用程序的管理部分具有相同的网址,则只有 app1将永远解决。

关于python - 有没有办法在 django 中为两个或多个应用程序设置 url 命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21608158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com