import gradio as gr import js async def show_md(filename: str): """ 根据用户输入的文件名加载远程 Markdown 文件 filename: 用户输入,不带 .md """ if not filename.strip(): return "## ⚠️ 输入错误\n\n请输入有效的文件名..." url = f"https://shuju.rainx3.xyz/p/{filename}.md" try: response = await js.fetch(url) if response.status == 200: text = await response.text() return f"# 📄 {filename}.md\n\n---\n\n" + text else: return f"## ❌ 文件未找到\n\n```\nHTTP {response.status}: {filename}.md\n```\n\n检查文件名或网络连接状态。" except Exception as e: return f"## 🔥 连接失败\n\n```bash\nError: {str(e)}\n```\n\n可能的原因:\n- 网络连接问题\n- 服务器暂时不可用\n- 文件路径错误" # 创建暗黑主题界面 with gr.Blocks( title="GRBlog", theme=gr.themes.Monochrome(), css_paths=None ) as demo: with gr.Row(): with gr.Column(scale=1): filename_input = gr.Textbox( label="文件名", placeholder="输入文件名 (不含 .md 扩展名)...", value="", lines=1, elem_classes=["gr-textbox"] ) submit_btn = gr.Button( "⚡ 加载文档", variant="primary", elem_classes=["gr-button"] ) with gr.Row(): markdown_output = gr.Markdown( label="Markdown 内容", value="""# 🌃 欢迎来到 GRBlog 暗夜模式 --- ### 📝 内容展示 ```python # 代码高亮示例 def hello_world(): print("Welcome to GRBlog!") ``` > **提示:** 在上方输入框中输入文件名,体验完整功能。 --- *""", elem_classes=["gr-markdown"] ) # 绑定事件 submit_btn.click( fn=show_md, inputs=[filename_input], outputs=[markdown_output] ) filename_input.submit( fn=show_md, inputs=[filename_input], outputs=[markdown_output] ) demo.launch()