Chan Meng commited on
Commit
132113e
·
1 Parent(s): 8e118cf
Files changed (2) hide show
  1. README模板.md → README_template.md +2 -52
  2. app.py +76 -23
README模板.md → README_template.md RENAMED
@@ -1,4 +1,4 @@
1
- ![header](https://capsule-render.vercel.app/api?type=waving&color=timeGradient&height=200&section=header&text=Hi%2C%20I%27m%20{{full_name}}%20👋🏻&fontSize=50&animation=scaleIn&fontAlignY=35&desc={{bio}}&descSize=20&descAlignY=55&descAlign=50)
2
 
3
  <div align="center">
4
 
@@ -23,56 +23,6 @@ while (isAwake) {
23
  ![](https://capsule-render.vercel.app/api?type=venom&height=150&text=🚀%20Featured%20Projects&fontSize=40&color=0:8871e5,100:b678c4&stroke=b678c4)
24
 
25
  <!-- Featured Projects Section -->
26
- <table>
27
- <tr>
28
- <td width="50%">
29
- <h3 align="center">{{project_1_name}}</h3>
30
- <div align="center">
31
- <a href="{{project_1_link}}" target="_blank">
32
- <img src="{{project_1_image}}" width="50%" alt="{{project_1_name}}"/>
33
- </a>
34
- <br>
35
- <br>
36
- <p>
37
- <a href="{{project_1_github}}" target="_blank">
38
- <img src="https://img.shields.io/badge/View_on_GitHub-2ea44f?style=for-the-badge&logo=github"/>
39
- </a>
40
- <a href="{{project_1_live}}" target="_blank">
41
- <img src="https://img.shields.io/badge/Live_Demo-brightgreen?style=for-the-badge&logo=vercel"/>
42
- </a>
43
- </p>
44
- <p align="left">
45
- • {{project_1_point_1}}<br>
46
- • {{project_1_point_2}}<br>
47
- • {{project_1_point_3}}
48
- </p>
49
- </div>
50
- </td>
51
- <td width="50%">
52
- <h3 align="center">{{project_2_name}}</h3>
53
- <div align="center">
54
- <a href="{{project_2_link}}" target="_blank">
55
- <img src="{{project_2_image}}" width="50%" alt="{{project_2_name}}"/>
56
- </a>
57
- <br>
58
- <br>
59
- <p>
60
- <a href="{{project_2_github}}" target="_blank">
61
- <img src="https://img.shields.io/badge/View_on_GitHub-2ea44f?style=for-the-badge&logo=github"/>
62
- </a>
63
- <a href="{{project_2_live}}" target="_blank">
64
- <img src="https://img.shields.io/badge/Live_Demo-brightgreen?style=for-the-badge&logo=vercel"/>
65
- </a>
66
- </p>
67
- <p align="left">
68
- • {{project_2_point_1}}<br>
69
- • {{project_2_point_2}}<br>
70
- • {{project_2_point_3}}
71
- </p>
72
- </div>
73
- </td>
74
- </tr>
75
- </table>
76
 
77
  ![](https://capsule-render.vercel.app/api?type=venom&height=150&text=💻%20Tech%20Stack&fontSize=40&color=0:00FFFF,100:1E90FF&stroke=1E90FF)
78
 
@@ -125,7 +75,7 @@ while (isAwake) {
125
 
126
  [![Portfolio](https://img.shields.io/badge/Portfolio-000?style=for-the-badge&logo=vercel&logoColor=yellow)]({{portfolio_link}})
127
  [![LinkedIn](https://img.shields.io/badge/LinkedIn-0A66C2?style=for-the-badge&logo=linkedin&logoColor=white)]({{linkedin_link}})
128
-
129
  </div>
130
 
131
  ![footer](https://capsule-render.vercel.app/api?type=waving&color=timeGradient&height=100&section=footer)
 
1
+ ![header](https://capsule-render.vercel.app/api?type=waving&color=timeGradient&height=200&section=header&text=Hi%2C%20I%27m%20{{full_name}}%20👋&fontSize=50&animation=scaleIn&fontAlignY=35&desc={{bio}}&descSize=20&descAlignY=55&descAlign=50)
2
 
3
  <div align="center">
4
 
 
23
  ![](https://capsule-render.vercel.app/api?type=venom&height=150&text=🚀%20Featured%20Projects&fontSize=40&color=0:8871e5,100:b678c4&stroke=b678c4)
24
 
25
  <!-- Featured Projects Section -->
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
 
27
  ![](https://capsule-render.vercel.app/api?type=venom&height=150&text=💻%20Tech%20Stack&fontSize=40&color=0:00FFFF,100:1E90FF&stroke=1E90FF)
28
 
 
75
 
76
  [![Portfolio](https://img.shields.io/badge/Portfolio-000?style=for-the-badge&logo=vercel&logoColor=yellow)]({{portfolio_link}})
77
  [![LinkedIn](https://img.shields.io/badge/LinkedIn-0A66C2?style=for-the-badge&logo=linkedin&logoColor=white)]({{linkedin_link}})
78
+
79
  </div>
80
 
81
  ![footer](https://capsule-render.vercel.app/api?type=waving&color=timeGradient&height=100&section=footer)
app.py CHANGED
@@ -27,7 +27,7 @@ def replace_template_variables(template_content, variables_dict):
27
  encoded_value = encode_url_safe(value)
28
  template_content = template_content.replace(f'{{{{{key}}}}}', encoded_value)
29
  else:
30
- # 其他字段正常替��
31
  template_content = template_content.replace(f'{{{{{key}}}}}', value)
32
 
33
  return template_content
@@ -55,6 +55,58 @@ def process_skills(skills_text):
55
  # 生成徽章
56
  return " ".join([create_badge(skill) for skill in skills])
57
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  def main():
59
  st.set_page_config(
60
  page_title="GitHub README Profile Generator",
@@ -66,7 +118,7 @@ def main():
66
  st.markdown("### 生成你的个性化 GitHub Profile README")
67
 
68
  # 加载默认模板
69
- template_path = Path("README模板.md")
70
  template_content = load_template(template_path)
71
 
72
  # 创建两列布局
@@ -88,21 +140,20 @@ def main():
88
  # 日常行为
89
  st.subheader("日常行为")
90
  daily_routine_1 = st.text_input("日常行为 1", value="code")
91
- daily_routine_2 = st.text_input("日常行为 2", value="eat")
92
  daily_routine_3 = st.text_input("日常行为 3", value="sleep")
93
  daily_routine_4 = st.text_input("日常行为 4", value="repeat")
94
 
95
  # 项目信息
96
- st.subheader("项目 1")
97
- project_1_name = st.text_input("项目 1 名称", value="My Awesome Project")
98
- project_1_link = st.text_input("项目 1 链接", value="#")
99
- project_1_image = st.text_input("项目 1 图片", value="/path/to/project1.png")
100
- project_1_github = st.text_input("项目 1 GitHub", value="#")
101
- project_1_live = st.text_input("项目 1 演示链接", value="#")
102
- project_1_point_1 = st.text_input("项目 1 要点 1", value="Feature 1")
103
- project_1_point_2 = st.text_input("项目 1 要点 2", value="Feature 2")
104
- project_1_point_3 = st.text_input("项目 1 要点 3", value="Feature 3")
105
-
106
  # 技能徽章
107
  st.subheader("技能栈")
108
  core_skills = st.text_area("核心技能 (用逗号分隔)",
@@ -121,7 +172,7 @@ def main():
121
  st.subheader("其他信息")
122
  footer_text = st.text_area("页脚文本", value="Thanks for visiting my GitHub profile! Feel free to connect or check out my projects.")
123
 
124
- # 创建变量字典
125
  variables = {
126
  'full_name': full_name or '',
127
  'bio': bio or '',
@@ -132,20 +183,22 @@ def main():
132
  'daily_routine_2': daily_routine_2,
133
  'daily_routine_3': daily_routine_3,
134
  'daily_routine_4': daily_routine_4,
135
- 'project_1_name': project_1_name,
136
- 'project_1_link': project_1_link,
137
- 'project_1_image': project_1_image,
138
- 'project_1_github': project_1_github,
139
- 'project_1_live': project_1_live,
140
- 'project_1_point_1': project_1_point_1,
141
- 'project_1_point_2': project_1_point_2,
142
- 'project_1_point_3': project_1_point_3,
143
  'core_skills_badges': core_skills_badges,
144
  'frontend_skills_badges': frontend_skills_badges,
145
  'backend_skills_badges': backend_skills_badges,
146
- 'footer_text': footer_text
 
147
  }
148
 
 
 
 
 
 
 
 
 
 
149
  # 生成预览内容
150
  preview_content = replace_template_variables(template_content, variables)
151
 
 
27
  encoded_value = encode_url_safe(value)
28
  template_content = template_content.replace(f'{{{{{key}}}}}', encoded_value)
29
  else:
30
+ # 其他字段正常替换
31
  template_content = template_content.replace(f'{{{{{key}}}}}', value)
32
 
33
  return template_content
 
55
  # 生成徽章
56
  return " ".join([create_badge(skill) for skill in skills])
57
 
58
+ def create_project_fields(col, project_num):
59
+ """创建单个项目的输入字段"""
60
+ st.subheader(f"项目 {project_num}")
61
+ project_data = {
62
+ f'project_{project_num}_name': st.text_input(f"项目 {project_num} 名称", value="My Awesome Project", key=f"name_{project_num}"),
63
+ f'project_{project_num}_link': st.text_input(f"项目 {project_num} 链接", value="#", key=f"link_{project_num}"),
64
+ f'project_{project_num}_image': st.text_input(f"项目 {project_num} 图片", value="/path/to/project.png", key=f"image_{project_num}"),
65
+ f'project_{project_num}_github': st.text_input(f"项目 {project_num} GitHub", value="#", key=f"github_{project_num}"),
66
+ f'project_{project_num}_live': st.text_input(f"项目 {project_num} 演示链接", value="#", key=f"live_{project_num}"),
67
+ f'project_{project_num}_point_1': st.text_input(f"项目 {project_num} 要点 1", value="Feature 1", key=f"point1_{project_num}"),
68
+ f'project_{project_num}_point_2': st.text_input(f"项目 {project_num} 要点 2", value="Feature 2", key=f"point2_{project_num}"),
69
+ f'project_{project_num}_point_3': st.text_input(f"项目 {project_num} 要点 3", value="Feature 3", key=f"point3_{project_num}")
70
+ }
71
+ return project_data
72
+
73
+ def create_project_html(project_num):
74
+ """生成单个项目的 HTML 模板"""
75
+ return f'''<td width="50%">
76
+ <h3 align="center">{{{{project_{project_num}_name}}}}</h3>
77
+ <div align="center">
78
+ <a href="{{{{project_{project_num}_link}}}}" target="_blank">
79
+ <img src="{{{{project_{project_num}_image}}}}" width="50%" alt="{{{{project_{project_num}_name}}}}"/>
80
+ </a>
81
+ <br>
82
+ <br>
83
+ <p>
84
+ <a href="{{{{project_{project_num}_github}}}}" target="_blank">
85
+ <img src="https://img.shields.io/badge/View_on_GitHub-2ea44f?style=for-the-badge&logo=github"/>
86
+ </a>
87
+ <a href="{{{{project_{project_num}_live}}}}" target="_blank">
88
+ <img src="https://img.shields.io/badge/Live_Demo-brightgreen?style=for-the-badge&logo=vercel"/>
89
+ </a>
90
+ </p>
91
+ <p align="left">
92
+ • {{{{project_{project_num}_point_1}}}}<br>
93
+ • {{{{project_{project_num}_point_2}}}}<br>
94
+ • {{{{project_{project_num}_point_3}}}}
95
+ </p>
96
+ </div>
97
+ </td>'''
98
+
99
+ def generate_projects_section(num_projects):
100
+ """生成项目展示区域的 HTML"""
101
+ projects_html = []
102
+ for i in range(0, num_projects, 2):
103
+ row_html = f'''<tr>
104
+ {create_project_html(i + 1)}
105
+ {create_project_html(i + 2) if i + 1 < num_projects else ""}
106
+ </tr>'''
107
+ projects_html.append(row_html)
108
+ return "\n".join(projects_html)
109
+
110
  def main():
111
  st.set_page_config(
112
  page_title="GitHub README Profile Generator",
 
118
  st.markdown("### 生成你的个性化 GitHub Profile README")
119
 
120
  # 加载默认模板
121
+ template_path = Path("README_template.md")
122
  template_content = load_template(template_path)
123
 
124
  # 创建两列布局
 
140
  # 日常行为
141
  st.subheader("日常行为")
142
  daily_routine_1 = st.text_input("日常行为 1", value="code")
143
+ daily_routine_2 = st.text_input("日常行 2", value="eat")
144
  daily_routine_3 = st.text_input("日常行为 3", value="sleep")
145
  daily_routine_4 = st.text_input("日常行为 4", value="repeat")
146
 
147
  # 项目信息
148
+ st.subheader("项目展示")
149
+ num_projects = st.number_input("项目数量", min_value=1, max_value=10, value=2)
150
+
151
+ # 存储所有项目数据
152
+ all_project_data = {}
153
+ for i in range(1, num_projects + 1):
154
+ project_data = create_project_fields(col1, i)
155
+ all_project_data.update(project_data)
156
+
 
157
  # 技能徽章
158
  st.subheader("技能栈")
159
  core_skills = st.text_area("核心技能 (用逗号分隔)",
 
172
  st.subheader("其他信息")
173
  footer_text = st.text_area("页脚文本", value="Thanks for visiting my GitHub profile! Feel free to connect or check out my projects.")
174
 
175
+ # 更新变量字典,加入项目数据
176
  variables = {
177
  'full_name': full_name or '',
178
  'bio': bio or '',
 
183
  'daily_routine_2': daily_routine_2,
184
  'daily_routine_3': daily_routine_3,
185
  'daily_routine_4': daily_routine_4,
 
 
 
 
 
 
 
 
186
  'core_skills_badges': core_skills_badges,
187
  'frontend_skills_badges': frontend_skills_badges,
188
  'backend_skills_badges': backend_skills_badges,
189
+ 'footer_text': footer_text,
190
+ **all_project_data # 添加所有项目数据
191
  }
192
 
193
+ # 动态生成项目部分的模板内容
194
+ template_content = template_content.replace(
195
+ "<!-- Featured Projects Section -->",
196
+ f'''<!-- Featured Projects Section -->
197
+ <table>
198
+ {generate_projects_section(num_projects)}
199
+ </table>'''
200
+ )
201
+
202
  # 生成预览内容
203
  preview_content = replace_template_variables(template_content, variables)
204