如何在基于 Django class 的视图中更改模板
How to change template in Django class based view
如果我有一个基于 class 的视图,例如:
class equipmentdashboardView(LoginRequiredMixin,ListView):
context_object_name = 'equipmentdashboard'
template_name = 'equipmentdashboard.html'
login_url = 'login'
def get_queryset(self):
#some stuff
如何根据查询更改 template_name
?我想做类似的事情:
class equipmentdashboardView(LoginRequiredMixin,ListView):
context_object_name = 'equipmentdashboard'
if self.request.user.PSScustomer.customerName == 'Customer X':
template_name = 'equipmentdashboard_TL.html'
else:
template_name = 'equipmentdashboard.html'
login_url = 'login'
def get_queryset(self):
#some stuff
但是您无法访问get_queryset
之前的请求。
或者也许有更简单的方法来实现相同的行为?
您可以覆盖 .get_template_names()
method [Django-doc] 和 return 匹配的模板名称,因此:
class equipmentdashboardView(LoginRequiredMixin,ListView):
context_object_name = 'equipmentdashboard'
login_url = 'login'
def <strong>get_template_names</strong>(self):
if self.request.user.PSScustomer.customerName == 'Customer X':
return ['equipmentdashboard_TL.html']
else:
return ['equipmentdashboard.html']
.get_template_names()
应该 return 一个 可迭代的 模板名称。如果模板不存在,Django 将遍历列表,从而呈现第一个存在的可迭代模板。在这种情况下,我们可以 return 一个单例列表,其中包含 Django 应该尝试呈现的唯一模板。
如果我有一个基于 class 的视图,例如:
class equipmentdashboardView(LoginRequiredMixin,ListView):
context_object_name = 'equipmentdashboard'
template_name = 'equipmentdashboard.html'
login_url = 'login'
def get_queryset(self):
#some stuff
如何根据查询更改 template_name
?我想做类似的事情:
class equipmentdashboardView(LoginRequiredMixin,ListView):
context_object_name = 'equipmentdashboard'
if self.request.user.PSScustomer.customerName == 'Customer X':
template_name = 'equipmentdashboard_TL.html'
else:
template_name = 'equipmentdashboard.html'
login_url = 'login'
def get_queryset(self):
#some stuff
但是您无法访问get_queryset
之前的请求。
或者也许有更简单的方法来实现相同的行为?
您可以覆盖 .get_template_names()
method [Django-doc] 和 return 匹配的模板名称,因此:
class equipmentdashboardView(LoginRequiredMixin,ListView):
context_object_name = 'equipmentdashboard'
login_url = 'login'
def <strong>get_template_names</strong>(self):
if self.request.user.PSScustomer.customerName == 'Customer X':
return ['equipmentdashboard_TL.html']
else:
return ['equipmentdashboard.html']
.get_template_names()
应该 return 一个 可迭代的 模板名称。如果模板不存在,Django 将遍历列表,从而呈现第一个存在的可迭代模板。在这种情况下,我们可以 return 一个单例列表,其中包含 Django 应该尝试呈现的唯一模板。