团队所有路径中 url 的共同起点

Common start for url in all paths in team

我正在使用 Django 1.11 开发一个项目。 我对如何创建 url 的共同开头有疑问。 例如,创建团队后,所有成员的地址应如下所示:

domain.com/name_of_team
domain.com/name_of_team/blog
domain.com/name_of_team/blog/title_of_post

项目中的主要 url 文件:

urlpatterns = [
    url(r'', include('blog.urls', namespace='blog')),
    url(r'^accounts/', include('accounts.urls', namespace='accounts')),
    url(r'^admin/', admin.site.urls),
]

博客中的网址:

url(r'^$', login_required(RedirectToHome.as_view()), name='redirect_home'),
url(r'^t/(?P<pk>[0-9]+)/$', login_required(BlogHome.as_view()), name='blog_list'),
url(r'create/$', login_required(BlogCreate.as_view()), name='blog_create'),
url(r'^(?P<pk>[0-9]+)/delete/$', login_required(BlogDelete.as_view()), name='blog_delete'),
url(r'^(?P<pk>[0-9]+)/update/$', login_required(BlogUpdate.as_view()), name='blog_update'),
url(r'^(?P<pk>\d+)?/?$', login_required(BlogDetail.as_view()), name='blog_detail'),

也许有一些处理 url 地址的好的做法?

要使博客应用程序针对每个团队,您可以将其 URL 包含在其中;

url(r'^(?P<team_slug>[\w-]+)/', include('blog.urls', namespace='blog')),

这显然假设您的 Team 模型有一个 slug 字段,以便您可以安全地将它添加到上下文中并使用它来为 blog 应用程序形成您的 URL。

然后您可以拥有一个 Mixin 可以由博客中的视图共享,或者向共享基础视图添加一些内容以加载 Team

from django.views.generic.base import ContextMixin

from .models import Team


class TeamMixin(ContextMixin):

    def get_context_data(self, **kwargs):
        context = super(TeamMixin, self).get_context_data(**kwargs)
        context['team'] = Team.objects.get(slug=kwargs.get('team_slug'))
        return context