Search code examples
pythonflaskprawreddit

Printing a list in Flask


I want the script to make a list of the news headlines that it grabs from Reddit and display them as a text output. However it seems like the return function prevents me from doing that as it only lists one title.

from flask import Flask
import praw
import config

app = Flask(__name__)

@app.route('/') 
def index():
    reddit = praw.Reddit(client_id=config.client_id, client_secret=config.client_secret, user_agent="...")

    for submission in reddit.subreddit('worldnews').controversial(limit=10):
        print(submission.title)

    return(submission.title)

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

Solution

  • There is an answer that shows you the easy way to do it but I wanted to show you how you can do it with templates because that is a much better practice:

    main.py:

    from flask import Flask
    import praw
    import config
    
    app = Flask(__name__)
    
    @app.route('/') 
    def index():
        reddit = praw.Reddit(client_id=config.client_id, client_secret=config.client_secret, user_agent="...")
        reddit_data = []
    
        for submission in reddit.subreddit('worldnews').controversial(limit=10):
            reddit_data.append(submission.title)
    
        return render_template("show_reddit.html", data=reddit_data)
    
    if __name__ == "__main__":
        app.run(debug=True)
    

    templates/show_reddit.html:

    {% for item in data %}
        <p> {{ item }} </p>
    {% endfor %}
    

    In the template you can use HTML normally and to print out stuff and make the for loop you use Jinja2.