swagger-codegen-v3 Python-Flask自定义Mustache模板报错及模板位置咨询
Swagger Codegen V3 自定义模板生成Python-Flask代码报错问题
问题背景
- 数据源:已验证的Pet Store示例精简版YAML文件
- 自定义模板来源:从swagger-codegen主分支下载
flaskConnexion目录下的所有Mustache文件(v3.0.0分支未找到对应文件) - 执行生成命令:
docker run --rm -v $(pwd):/local swaggerapi/swagger-codegen-cli-v3 generate -i /local/openapi.yaml -l python-flask -o /local/out/python -t /local/custom_templates/ - 执行后出现语法报错,错误信息如下:
Exception in thread "Thread-1" java.lang.RuntimeException: Could not generate model 'Address' at io.swagger.codegen.v3.DefaultGenerator.generateModels(DefaultGenerator.java:457) at io.swagger.codegen.v3.DefaultGenerator.generate(DefaultGenerator.java:788) at io.swagger.codegen.v3.cli.cmd.Generate.run(Generate.java:388) at java.lang.Thread.run(Thread.java:748) Caused by: com.github.jknack.handlebars.HandlebarsException: local/custom_templates/model.mustache:25:29: found: '-last', expected: 'no viable alternative at input '{{^-last'' {{name}} = {{{value}}}{{^-last}}
核心疑问
- Python-Flask对应的正确Mustache文件位置在哪里?
- 如何解决上述语法报错?
解决方案
1. 正确的Mustache文件位置
swagger-codegen-v3中,python-flask生成器对应的官方模板路径是主分支下的modules/swagger-codegen/src/main/resources/python-flask目录。你之前下载的flaskConnexion目录是针对Connexion框架的专属模板,和python-flask生成器不兼容,这是导致问题的关键原因。
2. 语法报错解决方法
报错里的{{^-last}}属于swagger-codegen较新版本引入的Handlebars局部语法,而你使用的swaggerapi/swagger-codegen-cli-v3镜像版本(v3.x系列)不支持该语法。解决步骤:
- 替换模板资源:从主分支的
python-flask目录下载所有Mustache文件替换当前的自定义模板,该目录下的模板与python-flask生成器完全匹配,不会出现语法兼容问题 - 若需使用Connexion模板:需切换生成器为
-l flask(而非python-flask),同时确保下载对应flaskConnexion目录的模板,且使用支持该语法的swagger-codegen版本
内容的提问来源于stack exchange,提问作者Estuardolh
相关产品推荐
相关产品推荐

