我想为我的个人项目创建一个学校管理系统。
假设每个学校都有一个管理员。但是有些管理员可以管理多于一所学校,并且他们可以在学校之间切换以管理每所学校。
我想过一种方法,例如使用不同的URL路径。
urlpatterns = [
url(schools/<int:pk>/, SchoolView.as_view()),
]
有没有办法让我不通过为每个学校使用不同的URL路径来分开?因此,每个管理员都将获得相似的URL路径,但视图将基于Admin呈现或过滤以使用不同的学校。
但是我真的不知道该怎么做?我可以征求意见吗。非常感谢!
答案 0 :(得分:0)
每个视图函数都接受一个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
查询集。