Flask Community Workgroup
Setup Instructions
1. Fork the Repository
- Fork the repo to your GitHub account.
2. Clone Your Fork
- Clone your fork to your local machine:
git clone https://github.com/{username}/flaskcwg.github.io.git cd flaskcwg.github.io
3. Set Up Upstream Remote
- Add the original repository as an upstream remote:
git remote add upstream https://github.com/flaskcwg/flaskcwg.github.io.git
4. Create and Activate a Virtual Environment
-
Linux/Mac:
python -m venv env source env/bin/activate -
Windows:
py -m venv env env\Scripts\activate.bat # For Command Prompt # Or for Bash: source env/Scripts/activate
5. Install Dependencies
- Install the required dependencies:
python -m pip install -r requirements.txt
6. Build the HTML Content
- Run the
static.pyscript to generate the HTML content:python static.py
7. Serve the Site
- Serve the site locally:
cd docs python serve.py - Access the site at the IP address displayed in the terminal.
8. View Template Changes
- To apply changes made in the
/templatesdirectory:- Re-run
python static.pyin a separate terminal. - Refresh the browser to see the updates.
- Re-run
Production Workflow
Pull requests are merged into the source branch, which is automatically deployed to the gh-pages branch.
How to Add a New Page
In the static.py file, under the generate function, add another generate call, for example:
def main(args):
def gen():
generate('index.html', join(settings.OUTPUT_FOLDER, 'index.html'), **context)
generate('source_file.html', join(settings.OUTPUT_FOLDER, 'output_file.html'), **context)
Like this:
def main(args):
def gen():
generate('index.html', join(settings.OUTPUT_FOLDER, 'index.html'), **context)
generate('source_file.html', join(settings.OUTPUT_FOLDER, 'output_file.html'), **context)
Where source_file.html is the name of the file located in templates/ and output_file.html is the output file which will be located in docs/.
What is the techstack behind?
jamstack: Generate pages using Jinja templates.
flask + livereload: If you want to auto regenerate files without executing static.py.
Data Formats
Profile
In info.json, a profile looks like this
"greyli":{
"name": "Grey Li",
"bio": [],
"volunteer": {
"translation":{
"lang": "chinese",
"coordinator": "y"
},
"event": {},
"code": {},
"education": {}
},
"links":{
"twitter": ""
},
"retired": "n"
},
name: Member full name.
volunteer: Looks for four optional keys: translation, event, code, education. For translation, you have lang and coordinator, the latter being optional.
bio: The bio is generated such that '' are converted into <br\>. a bio would look like this:
"bio": [
"Line iwue hfowherf oewrhfje.",
"woihfjerewoi tgfreh eroh gfrehre greh g.",
"", "",
"Some more lines"],
retired: If someone is active or not.
Links are generated as links with text as the key and link as the value.
Blog post
A blog post occurs in the format:
title: Demo blog post
summary: A demo post
authors: jugmac00
Abdur-RahmaanJ
date: May 19, 2021
slug: demo-blog-post
This is the first paragraph of the document.
```python
def x():
pass
```
And hence [link demo](https://flaskcwg.github.io)
All meta keys are mandatory but summary can be kept empty.
Inside of data/blog create a folder with the category you want. In settings.py add it:
BLOG_CATEGORIES = [
'main'
]
For authors, the author must occur in profiles.
Projects
{
"name": "Flask-Dance",
"link": "https://github.com/singingwolfboy/flask-dance",
"info": ["Doing the OAuth dance with style using Flask, requests, and oauthlib."],
"tags": ["auth", "oauth"]
}
FaQ
In data/faq, create a .md file with whatever name you want .md
The content should look like this:
title: Demo faq question
tags: demo
flask
lol
slug: demo-faq-question
This is the first paragraph of the document.
```python
def x():
pass
```
And hence [link demo](https://flaskcwg.github.io)
FlaskCWG Manager
With this tool you can create, edit and delete blog/faq posts, just execute python manage.py.