我只是在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'),
也许有一些处理网址的好习惯?
答案 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