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

时间:2019-02-18 20:39:35

标签: python django url architecture django-urls

我只是在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'),

也许有一些处理网址的好习惯?

1 个答案:

答案 0 :(得分:1)

要使博客应用程序特定于每个团队,您可以在其中添加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