Dynamic sitemap
The simple sitemap generator for Python projects.
Installation
pip install dynamic-sitemap
Usage
Static
from datetime import datetime
from dynamic_sitemap import SimpleSitemap, ChangeFreq
urls = [
'/',
{'loc': '/contacts', 'changefreq': ChangeFreq.NEVER.value},
{'loc': '/about', 'priority': 0.9, 'lastmod': datetime.now().isoformat()},
]
sitemap = SimpleSitemap('https://mysite.com', urls)
sitemap.write('static/sitemap.xml')
Dynamic
Only FlaskSitemap is implemented yet, so there is an example:
from dynamic_sitemap import FlaskSitemap
from flask import Flask
app = Flask(__name__)
sitemap = FlaskSitemap(app, 'https://mysite.com')
sitemap.build()
Then run your server and visit http://mysite.com/sitemap.xml.
The basic example with some Models:
from dynamic_sitemap import ChangeFreq, FlaskSitemap
from flask import Flask
from models import Post, Tag
app = Flask(__name__)
sitemap = FlaskSitemap(app, 'https://mysite.com', orm='sqlalchemy')
sitemap.config.TIMEZONE = 'Europe/Moscow'
sitemap.ignore('/edit', '/upload')
sitemap.add_items(
'/contacts',
{'loc': '/faq', 'changefreq': ChangeFreq.MONTHLY.value, 'priority': 0.4},
)
sitemap.add_rule('/blog', Post, loc_from='slug', priority=1.0)
sitemap.add_rule('/blog/tag', Tag, loc_from='id', changefreq='daily')
sitemap.build()
Also you can set configurations from your class (and it's preferred):
from dynamic_sitemap import ChangeFreq, FlaskSitemap
from flask import Flask
from models import Product
class Config:
FILENAME = 'static/sitemap.xml'
IGNORED = {'/admin', '/back-office', '/other-pages'}
ALTER_PRIORITY = 0.1
app = Flask(__name__)
sitemap = FlaskSitemap(app, 'https://myshop.org', config=Config)
sitemap.add_items(
'/contacts',
{'loc': '/about', 'changefreq': ChangeFreq.MONTHLY.value, 'priority': 0.4},
)
sitemap.add_rule('/goods', Product, loc_from='id', lastmod_from='updated')
sitemap.build()
Not supported yet:
- urls with more than 1 converter, such as
/page/<int:user_id>/<str:slug>
Check out the Changelog.
Contributing
Feel free to suggest any improvements :)
Development
Fork this repository, clone it and install dependencies:
pip install -r requirements/all.txt
Checkout to a new branch, add your feature and some tests, then try:
make precommit
If the result is ok, create a pull request to "dev" branch of this repo with a detailed description.
Done!