python - Django试图为几个不同的列表视图重用相同的网页
问题描述
只是盯着 python /django。但试图变得比我的能力更聪明。因此,如果有人有时间教育我,我将不胜感激。我有一个主要模型来处理“工单”。然后我有链接到每个订单的数据子集。然后我生成了一个 html 模板,我可以在列表视图中查看订单和所有数据子集。
现在,我尝试为所有类型(模型)数据的列表视图生成一个通用 HTML 模板,而不是为每个数据模型创建一个 HTML 模板。我以为我可以通过 context_data 定义变量。
即使不完整,我想你也明白我想用下面的代码做什么。
否则 HTML 模板和视图正在工作。
视图.py
class WO_TravelView(ListView):
template_name = 'TravelLaborPartsLists.html'
model = WorkOrderTravel
def get_context_data(self, **kwargs):
id_ = self.kwargs.get('str')
context = super().get_context_data(**kwargs)
context['list'] = WorkOrderTravel.objects.filter(wo_num=id_).order_by('wo_travel_slug')
context['page'] = 'Travel logged for'
context['string'] = id_
context['label'] = 'Work order-instance / Start / Stop '
context['data1'] = 'item.wo_travel_slug'
context['data2'] = 'item.wo_travel_start'
context['data3'] = 'item.wo_travel_stop'
return context
class WO_PartsView(ListView):
template_name = 'TravelLaborPartsLists.html'
model = WorkOrderParts
def get_context_data(self, **kwargs):
id_ = self.kwargs.get('str')
context = super().get_context_data(**kwargs)
context['list'] = WorkOrderParts.objects.filter(wo_num=id_).order_by('wo_travel_slug')
context['page'] = 'Parts included in order'
context['string'] = id_
context['label'] = 'Operation / Partnumber / Qty '
context['data1'] = 'item.wo_part_op'
context['data2'] = 'item.wo_part_id'
context['data3'] = 'item.wo_part_qty'
return context
HTML
<h1>{{ page }}</h1>
<h1>{{ string }}</h1>
<l2> {{label}} </l2>
{% for item in list %}
<p>{{data1}} - <a >{{data2}}</a>- {{data3}} </p>
{% endfor %}
解决方案
我认为 Egor 的回答效果很好。因为我同时对列表实现了标准过滤功能。我发现它更容易,即使我无法判断它是好还是坏的解决方案。至少它有效。
我决定只需要有限数量的字段,因此我将它们标准化为 5 个。然后,由于我想要更好的列名,我还为每个数据子集(类)定义了一个标题。所以现在我对 8 组不同的数据使用相同的模板。
视图.py
qs = Model.objects.filter(id=id)
context = {
'queryset': qs.values(
'modelfield1',
'modelfield2',
'modelfield5',
'modelfield6',
'modelfield7',
),
'ListHeader': 'xxxxxxxxxxxxxxxxx',
}
这样我可以为每组数据定义不同的字段和标题。然后我使用简单的代码用一些垫片渲染出来。
在 HTML 模板中
<h5>{{ ListHeader }}</h5>
<hr/>
{% for item in queryset %}
{% for value in item.values %}<td>..{{ value }}..|</td>{% endfor %}
{% endfor %}
推荐阅读
- c# - MediaPlayerElement 的 UWP MediaEnded 事件处理程序引发 System.ArgumentException
- webview - 颤抖的付款之旅
- ffmpeg - MP4 - 获取当前字幕文本
- hadoop - Hadoop返回的文件大小是否包括复制因子?
- jquery - 将 URL 复制到剪贴板脚本时出现未定义的错误消息
- angular - 如何使用angular2一次取消选中一个复选框
- c# - 从 C# 调用 C++ 方法时出现内存异常错误
- javascript - 节点包“node-rsa”的解密问题
- laravel - Laravel 关系通过模型:使其扁平化
- amazon-web-services - AWS Centos 6.9 和 6.10 AMI 是否支持 NVMe 和 ENA 驱动程序?