You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何渲染swagger-codegen生成的模型对象而非数据库模型对象

问题解答:Django模板渲染Swagger生成的对象列表

首先直接给你结论:Django完全支持渲染非Django模型对象,你现在的问题主要是模板代码里的一个小失误,当然转字典也是可行的方案之一,下面详细拆解:

1. 为什么模板没显示数据?你的模板代码有个小问题

原视图里的mapping_operation_list是Django QuerySet,它自带.all()方法,但Swagger-Codegen生成的对象列表是普通Python列表,根本没有.all()属性。看你的模板代码:

{% for mapping_operation in mapping_operation_list.all %}

这行代码会尝试调用列表的.all()方法,结果自然找不到,循环也就没执行,所以页面看不到数据。

快速修复:把.all()去掉就行:

{% for mapping_operation in mapping_operation_list %}

只要Swagger生成的MappingOperation对象有id属性(你已经确认数据获取成功,肯定是有的),模板就能正常渲染mapping_operation.id。

2. Django模板对非模型对象的支持

Django模板引擎不挑对象类型——不管是自定义类实例、普通字典还是第三方库生成的对象,都可以通过.访问它的属性或不带参数的方法。比如如果你的Swagger对象有name属性,模板里写{{ mapping_operation.name }}就能正常输出。

你可以在模板里加个调试语句验证:

{{ mapping_operation_list }}  {# 直接输出列表内容,确认数据是否存在 #}
{{ mapping_operation|dir }}   {# 查看对象的所有属性,确认id等字段是否存在 #}

3. 是否需要转为字典?最佳实践是什么?

转字典是可选方案,不是必须的,分两种场景判断:

场景一:只是解决当前渲染问题

直接修复模板的.all()就足够了,不需要额外转换,这是最简洁高效的方式。

场景二:需要统一数据格式或兼容现有逻辑

如果你的项目里其他视图用的是字典/QuerySet,或者后续需要对数据做更多字典式的操作,可以把Swagger对象转成字典。Swagger-Codegen生成的Python客户端对象通常自带to_dict()方法,你可以这样处理:

def load_mapping_metadata_only_operations(request):
    try:
        mapping_operation_response = api_instance.find_models_by_name()
    except ApiException as e:
        print("Exception when calling MappingApi->find_models_by_name: %s\n" % e)
    # 转换为字典列表
    mapping_operation_list = [item.to_dict() for item in mapping_operation_response]
    context = {
        'mapping_operation_list': mapping_operation_list,
        'transformation_list': [],
        'source_table_list': [],
        'destination_table_list': [],
    }
    return render(request, 'migration_core/migation_tool.html', context)

转换后,模板里既可以用{{ mapping_operation.id }}(字典的属性访问语法),也可以用{{ mapping_operation['id'] }}(标准字典访问语法)。

总结

  • 优先修复模板的.all()问题,这是当前不显示数据的直接原因;
  • Django模板完全支持渲染Swagger生成的对象,不需要强制转字典;
  • 转字典适合需要统一数据格式或兼容现有字典逻辑的场景。

内容的提问来源于stack exchange,提问作者Frans van Egdom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:33:04