django - 如何在基于 Django 类的视图中更改模板
问题描述
如果我有一个基于类的视图,例如:
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()
方法 [Django-doc],并返回匹配的模板名称,因此:
class equipmentdashboardView(LoginRequiredMixin,ListView):
context_object_name = 'equipmentdashboard'
login_url = 'login'
def get_template_names(self):
if self.request.user.PSScustomer.customerName == 'Customer X':
return ['equipmentdashboard_TL.html']
else:
return ['equipmentdashboard.html']
.get_template_names()
应该返回一个可迭代的模板名称。如果模板不存在,Django 将通过列表进行枚举,从而呈现确实存在的可迭代对象的第一个模板。在这种情况下,我们可以返回一个单例列表,其中包含 Django 应该尝试呈现的唯一模板。
推荐阅读
- typescript - Typescript - 如何键入对象的未知属性?
- python - python中的用户输入矩阵(n * n + 1)
- python-3.x - Python - 如何从另一个类返回实例的值?
- flutter - 颤振测试发现两个具有相同键的`SnackBar`,当只有一个构建时
- web-scraping - Youtube 上的 colab 抓取
- javascript - 当我想分配变量 JS 时,分配的左侧无效
- ajax - Safari 将 blob 文件下载为 example.com
- python - 颜色图的自定义刻度线
- python - 将列添加到现有的 numpy 2D-Array
- reactjs - 在组件中记住获取的结果