Skip to main content

Too. Much. Code.

Too. Much. Code.

As you've probably figured out by now, your flask files get pretty big pretty quickly.


No one wants all of that code in one page. It's too much.


Today we will learn how to use templating and redirecting to slim things down a bit.


👉 Here's some simple Flask code to start us off:


from flask import Flask

app = Flask(__name__)

@app.route('/')

def index():

  myName = "David"

  page = f"""Hi {myName}"""

  return page

app.run(host='0.0.0.0', port=81)



👉 This is fine for small code, but for much larger projects we can create templates to store our HTML elsewhere. Let's do that now:


1.Create a folder called template.

2.Create an HTML file called portfolio inside the template folder.


3.Now I'm going to paste my portfolio code from before into the portfolio page.

4.Next, I create a CSS folder and a file called style.css. I paste my CSS for the portfolio page into that file.

5.Edit my HTML in the portfolio page to fully reference the style.css file in the static folder.

<link href="/static/css/portfolio.css" rel="stylesheet" type="text/css" />  

6.Make sure all of my images, etc. are in suitable subfolders in static. Edit all the references in portfolio.html to ensure that they have the proper file paths.

Now, back in main.py... 

1.Set our fString to blank
2.Revist an old friend f= open()
3.Open the portfolio.html file
4.Read the contents into the 'page' variable

@app.route('/')
def index():
  myName = "David"
  page = ""
  f = open("template/portfolio.html", "r")
  page = f.read()
  f.close()
  return page


More Pages
👉 Next, I'm going to add a 'home' page to the Flask code. 

from flask import Flask

app = Flask(__name__)


@app.route('/')
def index():
    return 'Hello from Flask!'

@app.route('/home') # Creates the path to the home page
def home(): # Subroutine to create the home page
  # Three quotes followed by the html for the baldies site. Three more quotes to close. All the HTML is assigned to the 'page' variable
  page = """html
  
  <html>
    
  <head>
    <title>David's World Of Baldies</title>
  </head>


  <body>
  <h1>Dave's World of Baldies</h1> 
  <h2>Welcome to our website!</h2>

  <p>We all know that throughout history some of the greatest have been Baldies, let's see the epicness of their heads bereft of hair.</p>

  <h2>Gallery of Baldies</h2>
  <p>Here are some of the legends of the bald world.</p>

  <img src="images/picard.jpg" width = 30%> 
  <p><a href = "https://memory-alpha.fandom.com/wiki/Star_Trek:_Picard">Captain Jean Luc Picard: Baldest Star Trek captain, and legend.</a></p>

  <ul>
    <li>Beautiful bald man</li>
    <li>Calm and cool under pressure</li>
    <li>All the Picard memes</li>
  </ul>

  <p><a href = "page2.html">Go to page 2</a></p>
  
</body>
  
</html>
  
  """
  
  return page # returns the contents of the page variable


app.run(host='0.0.0.0', port=81)   

fStrings and Replacing
Using fStrings and the .replace() string manipulation technique from many lessons ago lets us customize the webpage for our user. Here's how:

👉 First, I've put a placeholder for a name in my portfolio.html file.

<body>
  <h1>{name}'s Portfolio</h1>


👉 Now in the Flask code, I can use the replace() function. Note that I've done this before the return command.

@app.route('/')
def index():
  myName = "Katie"
  page = ""
  f = open("template/portfolio.html", "r")
  page = f.read()
  f.close()
  page = page.replace("{name}", myName) # Replace all instances of {name} with the contents of the 'myName' variable
  
  return page


I can reuse this technique to make multiple changes to a page.

👉 Let's look at some example code where I've done this to create a generic page that can be customised by the user:

<body>
  <h1>{name}'s Portfolio</h1>
  <h2>{title}</h2>
  <p>{text}</p>
<a href="{link}"><img src="static/images/{image}" width="500px"></a>


👉 Now in my main code, all I have to do is store the information in variables and use multiple replace. 

def index():
  myName = "Katie"
  title = "Day 56 Solution"
  text = "So, day 56 was all about using csv reading and file and folder manipulation to make 100 files in dozens of folders. This was tricky because the names of the folders and files were based on the top 100 streaming songs and so weren't simple to encode."
  image = "56.png"
  link = "https://replit.com/@DavidAtReplit/Day-056-Solution#main.py"
  
  page = ""
  f = open("template/portfolio.html", "r")
  page = f.read()
  f.close()
  page.replace("{name}", myName)
  page.replace("{title}", title)
  page.replace("{text}", text)
  page.replace("{image}", image)
  page.replace("{link}", link)
  return page  


👉 For example, I could create Day 56 as its own app.route like this:

@app.route('/56')
def fiftySix():
  myName = "Dave"
  title = "Day 56 Solution"
  text = "So, day 56 was all about using csv reading and file and folder manipulation to make 100 files in dozens of folders. This was tricky because the names of the folders and files were based on the top 100 streaming songs and so weren't simple to encode."
  image = "56.png"
  link = "https://replit.com/@DavidAtReplit/Day-056-Solution#main.py"
  
  page = ""
  f = open("template/portfolio.html", "r")
  page = f.read()
  f.close()
  page.replace("{name}", myName)
  page.replace("{title}", title)
  page.replace("{text}", text)
  page.replace("{image}", image)
  page.replace("{link}", link)
  return page 


Redirecting

Redirecting is useful when you want to send a user to another web address, but that address is really long.

It requires another import at the top of the main.py file:

from flask import Flask, redirect


👉 Now I'll add an app route. In this example, I want to redirect users to my page for Day 77. All I put in the subroutine is a return redirect("") with the URL in the quotes.

from flask import Flask, redirect
@app.route('/77')
def seventySeven():
  return redirect("https://replit.com/@DavidAtReplit/Day-077-Solution#main.py")
  
  return page


This is really powerful. You've effectively created your own link shortener. All the user has to do is add /77 to the end of the home page URL.


Comments

Popular posts from this blog

FOR LOOP , RANGE

  FOR LOOP  A  while  loop is perfect to use when we  don't  know how many times we want the loop to repeat.  If we have an idea of how many times we want the loop to repeat, we can use a  for  loop to loop code in exactly the same way the  while  loop did.  EXAMPLE :  for counter in range(10):   print(counter) RANGE  The  range  function creates a list of numbers in the range you create. If you only give it one number, it will start at  0  and move to a state where the final number is  one less  than the number in the brackets. In this case, the final number would be  9 .  EXAMPLE :  total = 0 for number in range(100) :   total += number   print(total)

ALL ABOUT WHILE LOOP

 WHILE LOOP  A  while  loop allows your code to repeat itself based on a condition you set.   EXAMPLE : counter = 0 while counter < 10:   print(counter)   counter +=1 Infinite Loop  You have to be  really  careful that you don't accidentally invoke an infinite loop! This is where the computer will loop code until the end of time. Without a break. Forever.  This is just saying "count to 10 by 1 each time." to make the loop end. Don't forget, if your  condition  is a  >  then you might need to  -= . This will subtract from the variable instead of adding to it.   EXAMPLE : counter = 0 while counter < 10:   print(counter)    counter += 1

IF AND ELSE STATEMENT

  If Statements    These statements are a bit like asking a question. You are telling the computer:  if  something is true,  then  do this specific block of code. Double equals ( == ) is asking the computer to compare if these two things are  exactly  the same.  EXAMPLE :  myName = input("What's your name?: ") if myName == "David":  What is else? IF  the condition is  not  met with the  if  statement, then we want the computer to do the  else  part instead. Likewise, if the condition  is  met in the  if  statement, then the  else  bit is ignored by the computer. The  else  statement must be the first thing  unindented  after the  if  statement and in line with it    EXAMPLE :  myName = input("What's your name?: ") if myName == "David":  print("Welcome Dude!")  print("You're just the baldest dude I've ever seen...