我正在制作一个 Django 网站,其中有 2 个应用程序。一旦用户登录并导航到站点的仪表板区域,我希望他们选择一个要管理的租户,并为每个后续菜单按钮单击以位于该租户的上下文中。例如,用户登录时可以访问“tenant1”。我希望所有网址都遵循格式 http://mywebsite/tenant1/insert_uri_here.
到目前为止,我已经成功地创建了一个租户选择器页面,并通过添加 slug 从那里导航到仪表板。问题是每个后续页面都不再包含 slug,而且我不确定如何从上一页访问 slug 以便能够在 href 中访问它。即便如此,我仍然可以看到依赖于前几页 slug 的解决方案很麻烦,因为某些导航选项不需要 slug,只需要用户信息。
这是我的 URLs.py
urlpatterns = [
path('', tenant_selector.as_view(), name='tenant_selector'),
path('<slug:slug>/dashboard', Dashboard.as_view(), name='Dashboard'),
path('<slug:slug>/config/', config_view.as_view()),
path('<slug:slug>/run_func/', loading_view.as_view()),
path('profile/', user_update_view.as_view(), name='Profile'),
path('success', Success.as_view()),
]
下面是Views.py
class Dashboard(TemplateView):
template_name = "dashboard.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['total'] = staff_sync_model.objects.count() + student_sync_model.objects.count()
context['staff'] = staff_sync_model.objects.count()
context['student'] = student_sync_model.objects.count()
return context
class config_view(CreateView):
model = tenant_model
form_class = config_form
template_name='tenant_config.html'
success_url='/account/success'
def form_valid(self, form):
obj = form.save(commit=False)
obj.user = self.request.user
obj.save()
return redirect('/account/success')
class user_update_view(UpdateView):
form_class = EditUser
template_name='account.html'
success_url='success'
def form_invalid(self, form):
return HttpResponse("form is invalid.. this is just an HttpResponse object")
def get_object(self):
for detail in self.request.user._meta.fields:
print(detail)
return self.request.user
class Success(TemplateView):
template_name='success.html'
class tenant_selector(ListView):
model = tenant_model
template_name = 'tenant_selector.html'
def get(self, request, *args, **kwargs):
if self.request.user.is_authenticated:
data = self.request.user.tenant_set.all()
if len(data) == 0:
# Redirect to a different URL if data is empty
print('redirect')
return redirect('/account/config')
return super().get(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
if self.request.user.is_authenticated:
data = self.request.user.tenant_set.all()
context['data'] = data
return context
class loading_view(TemplateView):
template_name='loading.html'
不太确定正确的方法是什么,我对 Django 和 Web 开发还很陌生,所以任何向正确方向的推动或使用正确的工具来达到预期结果都将不胜感激!