Django: Показать другой контент на основе пользователя - PullRequest
0 голосов
/ 12 января 2019

Я бы хотел создать систему управления школой для моего личного проекта.

Допустим, есть администратор для каждой школы. Но есть некоторые администраторы, которые могут управлять более чем одной школой, и они могут переключаться между школами для управления каждой школой.

Я подумал об одном способе сделать это, используя другой путь URL, например.

urlpatterns = [
    url(schools/<int:pk>/, SchoolView.as_view()),
]

Есть ли способ, чтобы я не отделял, используя разные пути URL для каждой школы? Таким образом, каждый администратор получает схожий URL-путь, но представление визуализируется или фильтруется для использования в разных школах, в зависимости от администратора.

Но я не знаю, как это сделать? Могу ли я получить совет, как это сделать. Большое спасибо!

1 Ответ

0 голосов
/ 12 января 2019

Каждая функция просмотра принимает параметр request, поэтому, где бы вы ни определяли свою функцию просмотра, она, вероятно, будет выглядеть так:

from django.shortcuts import render

def my_view(request):
    #you can check user here with request.user
    #example
    if request.user.is_superuser:
        return render('your_template_for_admin.html', {})
    return render('your_template_for_basic_user.html', {})

РЕДАКТИРОВАТЬ: Если вы используете представление на основе классов, вы можете переопределить его get метод следующим образом:

from django.shortcuts import render
from django.views import View

class MyView(View):
    def get(self, request, *args, **kwargs):
        #here you can access the request object
        return render('template.html', {})

Редактирование на основе комментария : Вы можете использовать get_context_data () вместо get(), как @Daniel Roseman указал в комментариях.

from django.views import View

class MyView(View):
    def get_context_data(self, **kwargs):
        #example code assuming that we have a relation between schools and admin A
        context = super().get_context_data(**kwargs)
        context['schools'] = School.objects.filter(admin_id=self.request.user__id)
        return context

И тогда вы можете использовать schools queryset в вашем шаблоне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...