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

标签 python django namespaces django-urls

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

相关文章:

python - 为什么在 Python 中的子字符串 "not completely equivalent to slicing the string"中进行正则表达式搜索?

python - 使用 bottle.py 为静态文件设置 cookie

python - Python 的切片边界和 "stride"之间的神秘交互

python - Django 从 View 中提供图像

php - "Call to undefined function"调用自定义 Composer 包中的函数时

python - 在 Windows 上,如何将 1970 年之前的时间戳转换为易于管理的内容?

sql - Django:根据相交对象(共同 friend )的数量排序项目

Django元权限

c++ - 在 C++ 中使用::限定的命名空间

haskell - 如何告诉 Haskell 不要从两个模块导入同一个实例?