h-janes/flask-sitemapper

Trouble trying to use blueprints

Closed this issue · 2 comments

Lxstr commented

Hi there, sorry I'm struggling with how to use with blueprints in the following context, any help would be great. I don't know how to successfully use the decorator within the blueprint. Thanks

init.py

Other imports....
from app.webapp import server_bp
from flask_sitemapper import Sitemapper

sitemapper = Sitemapper()

def create_app():
    server = Flask(__name__)
    server.config.from_object(BaseConfig)
    register_dashapps(server)
    register_blueprints(server)

    sitemapper.init_app(server)

    return server


def register_blueprints(server):
    server.register_blueprint(server_bp)

webapp.py

server_bp = Blueprint("main", __name__)

@server_bp.route("/")
def index():
    if BaseConfig.DEMO_TOKEN:
        return redirect("/sales")
    etc

Hi, thanks for opening the issue - I will improve the documentation on this

The way I would usually do this is to set up the extensions in a separate extensions.py file. For your project this might look like this:

.
└── app/
    ├── __init__.py
    ├── extensions.py
    └── webapp.py

extensions.py

from flask_sitemapper import Sitemapper

sitemapper = Sitemapper()

# you could also set up other extensions e.g. sqlalchemy in this file

__init__.py

# other imports....
from app.webapp import server_bp
from app.extensions import sitemapper # import from extensions file

def create_app():
    server = Flask(__name__)
    server.config.from_object(BaseConfig)
    register_dashapps(server)
    register_blueprints(server)

    sitemapper.init_app(server) # initialise after registering all blueprints

    return server


def register_blueprints(server):
    server.register_blueprint(server_bp)

webapp.py

# other imports....
from app.extensions import sitemapper # import from extensions file

server_bp = Blueprint("main", __name__)

@sitemapper.include(lastmod="2023-03-21") # add this route to the sitemap with desired args
@server_bp.route("/")
def index():
    if BaseConfig.DEMO_TOKEN:
        return redirect("/sales")
    # etc

Let me know how it goes and thanks for using the extension :)

Lxstr commented

That seems to have worked perfectly now. Thanks for the clarification and the extension!