我想要做的是为两个或更多应用程序拥有公共(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/