Общий старт для URL во всех путях в команде - PullRequest
0 голосов
/ 18 февраля 2019

Я просто работаю над проектом в 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 в блоге:

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?

1 Ответ

0 голосов
/ 19 февраля 2019

Чтобы сделать приложение блога специфичным для каждой команды, вы можете указать его URL;

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

Это, очевидно, предполагает, что ваша модель Team имеет поле slug, чтобы вы могли безопасно добавить егок контексту и использовать его для формирования ваших URL-адресов для приложения blog.

После этого вы можете иметь 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
...