DEV Community

Cover image for Any Country's capital finder in Python
Aj
Aj

Posted on

Any Country's capital finder in Python

Hello Everyone! I'm going to show you how to create an app running on Flask python webframework that will get any country's capital based on user input written in python.

First you need to create a new folder let's name it country_capital_finder and create a txt file named (app) then change it's extension to be app.py that will be the python file containing the python code, and then inside that folder create another folder named (templates) and inside templates folder create another txt file named index change its extension to index.html, it's very important to create the folder structure and templates folder name exactly as templates otherwise Flask won't be able to run.

Now the fun part here is the python code for app.py file:

from flask import Flask, render_template, request
from countryinfo import CountryInfo

app = Flask(__name__)

# Function to get the capital of a country
def get_country_capital(country_name):
    country = CountryInfo(country_name)
    try:
        capital = country.capital()
        return capital
    except:
        return None

@app.route('/', methods=['GET', 'POST'])
def index():
    capital_info = None
    if request.method == 'POST':
        country_name = request.form.get('country_name')
        capital = get_country_capital(country_name)
        if capital:
            capital_info = f"The capital of {country_name} is {capital}."
        else:
            capital_info = f"Sorry, we couldn't find the capital for {country_name}."

    return render_template('index.html', capital_info=capital_info)

if __name__ == '__main__':
    app.run(debug=True)

Enter fullscreen mode Exit fullscreen mode

Once you're done with python file app.py go to index.html and write this HTML and CSS code in it:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Country Capital Finder</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 50px;
        }
        form {
            margin-bottom: 20px;
        }
        input[type="text"] {
            padding: 10px;
            margin-right: 10px;
            font-size: 16px;
        }
        button {
            padding: 10px 20px;
            font-size: 16px;
        }
        .result {
            margin-top: 20px;
            font-size: 18px;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <h1>Find the Capital of a Country</h1>

    <form method="POST">
        <label for="country_name">Enter Country Name:</label>
        <input type="text" id="country_name" name="country_name" required>
        <button type="submit">Find Capital</button>
    </form>

    {% if capital_info %}
        <div class="result">{{ capital_info }}</div>
    {% endif %}

    <footer>
        <p>Want to search again? <a href="/">Click here</a></p>
    </footer>
</body>
</html>

Enter fullscreen mode Exit fullscreen mode

Now that you have all code done we need to first install Flask on your computer if it's not installed using this command by opening CMD or powershell in Windows:

pip install flask

Make sure that the folder structure should be as the following:
Main folder country_capital_finder contains a file named app.py and folder named templates, then inside templates folder there is only one file which is index.html.

Then navigate to country_capital_finder folder from CMD or Powershell in windows and make sure to run the following command while you're at that path:

Flask run

Then copy the address below and open a web browser page and paste it in the webpage:

http://127.0.0.1:5000

To change ip address to your machine's ip for example type this command:
flask run --host=0.0.0.0

to specify the port number type this:
flask run --port=8080

You should be able to see a box where you can type any country's name and click Find Capital this should display the capital of the country you entered as the screenshot below:

Image description

Enjoy it and thank you so much.

Top comments (0)