Chan Meng
commited on
Commit
·
132113e
1
Parent(s):
8e118cf
update
Browse files- README模板.md → README_template.md +2 -52
- app.py +76 -23
README模板.md → README_template.md
RENAMED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
 {
|
|
| 23 |

|
| 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 |

|
| 78 |
|
|
@@ -125,7 +75,7 @@ while (isAwake) {
|
|
| 125 |
|
| 126 |
[]({{portfolio_link}})
|
| 127 |
[]({{linkedin_link}})
|
| 128 |
-
|
| 129 |
</div>
|
| 130 |
|
| 131 |

|
|
|
|
| 1 |
+

|
| 2 |
|
| 3 |
<div align="center">
|
| 4 |
|
|
|
|
| 23 |

|
| 24 |
|
| 25 |
<!-- Featured Projects Section -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 26 |
|
| 27 |

|
| 28 |
|
|
|
|
| 75 |
|
| 76 |
[]({{portfolio_link}})
|
| 77 |
[]({{linkedin_link}})
|
| 78 |
+
|
| 79 |
</div>
|
| 80 |
|
| 81 |

|
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("
|
| 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("
|
| 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("
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 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 |
|