命名空间和 URL 多站点

Namespace and URLs Multi-site

我是 Python 和 Django 的新手,但我正在开发基于 1.9

创建的多站点 Django

我目前正在尝试使其与 Django 2.0 一起使用,但我不明白命名空间和 URL 是如何工作的。

这是没有改变的片段:

/* Template */
<li><a href="{% url 'account:profile' %}">Profil {{ user.firstname.0 }}. {{ user.lastname }}</a></li>

/* Search project URLS.PY */
ACCOUNT_PATTERNS = [ url(r'^profil$', views.MyProfileFormView.as_view(), name='profile'), ]
urlpatterns = [ url(r'^gestion/', include(ACCOUNT_PATTERNS, namespace='account')), ]

以下是它在 1.9 版本中的工作方式(帐户映射到搜索站点):

/* Main project URLS.PY */
from search import urls as search_urls
urlpatterns = [
    url(r'^frontend/', include(frontend_urls)),
    url(r'^search/', include(search_urls)),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

这是我正在尝试使用的 2.0 修改版本:

/* Main project URLS.PY */
temppatterns = [   
    path('admin/', admin.site.urls),
    path('search/', include(search_urls)),
]
urlpatterns = temppatterns + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

但是当我去 /search 时,我得到了这个

NoReverseMatch at /search/
'account' is not a registered namespace

我相信 URLConf 有一些巨大的变化,但我找不到任何文档来帮助我理解是什么以及为什么。

添加一些上下文:

如果你需要什么,尽管问我,我已经在这个项目上做了很多工作,但现在我只是不明白这部分。

我是否应该重新购买所有 URLConf 以将命名空间包含在主项目 URLConf 中?

在此先感谢您帮助我理解

由于您添加了 app_name = 'search',您的 account 命名空间现在嵌套在 search 命名空间中。因此在反向 URL 时应该使用 search:account:,例如:

{% url 'search:account:profile' %}