diff --git a/GVSDServiceServer/apps/venom/views.py b/GVSDServiceServer/apps/venom/views.py index 6aa5a1db..bb2169c7 100644 --- a/GVSDServiceServer/apps/venom/views.py +++ b/GVSDServiceServer/apps/venom/views.py @@ -97,6 +97,36 @@ def _DetailRow(package): } +def _DefaultReadme(package, releases): + """包作者未填写 README 时,由包信息合成一份 Markdown 默认 README + + 仅用于官网展示(`PackageByNameView`);配置页读取到的仍是「作者填写的原文」, + 避免把合成内容回写成用户数据。 + """ + lines = [f'# {package.PackageName}', ''] + lines += [package.PackageDesc.strip() or '该软件包暂未填写说明。', ''] + + lines += ['## 安装', '', '```bash', f'venom install {package.PackageName}', '```', ''] + + dependencies = package.Dependencies or [] + lines += ['## 依赖', ''] + if dependencies: + lines += ['| 依赖包 | 版本约束 |', '| --- | --- |'] + lines += [f"| {d.get('Name', '')} | {d.get('Version') or '*'} |" for d in dependencies] + else: + lines += ['无外部依赖。'] + lines += [''] + + lines += ['## 版本历史', ''] + if releases: + lines += [f"- `{r.Version}` · {_Time(r.CreateTime)}" for r in releases] + else: + lines += ['尚未发布任何版本。'] + lines += [''] + + return '\n'.join(lines) + + class PackageListView(APIView): """包列表 / 新建包""" @@ -198,4 +228,8 @@ class PackageByNameView(APIView): PackageName=name).first() if package is None: return _err(f'包「{name}」不存在', 404, status=404) - return _ok(_DetailRow(package)) + row = _DetailRow(package) + # 作者未填 README 时给出合成内容,官网不出现「无 README」占位 + if not row['Readme']: + row['Readme'] = _DefaultReadme(package, list(package.releases.all())) + return _ok(row)