Skip to main content

URL slug generation with transliteration and uniqueness.

Project description

philiprehberger-slug

Tests PyPI version Last updated

philiprehberger-slug

URL slug generation with transliteration and uniqueness.

Installation

pip install philiprehberger-slug

Usage

from philiprehberger_slug import slugify

slugify("Hello World!")        # "hello-world"
slugify("Ünïcödé Têxt")       # "unicode-text"
slugify("Straße nach München") # "strasse-nach-munchen"

Options

from philiprehberger_slug import slugify

slugify("Hello World", separator="_")    # "hello_world"
slugify("Hello World", max_length=8)     # "hello"
slugify("Hello World", lowercase=False)  # "Hello-World"

Reserved Slug Blocking

from philiprehberger_slug import slugify, ReservedSlugError

try:
    slugify("Admin", reserved=["admin", "api", "about"])
except ReservedSlugError as e:
    print(e)  # "Slug 'admin' is reserved. Reserved slugs: ['admin', 'api', 'about']"

Custom Transliteration

from philiprehberger_slug import slugify

slugify("Ölkörper", transliterate={"ö": "oe", "ü": "ue"})  # "oelkoerper"

Slug from Parts

from philiprehberger_slug import slug_from_parts

slug_from_parts("2026", "03", "my post title")  # "2026-03-my-post-title"
slug_from_parts("Blog", "Straße & Weg")         # "blog-strasse-and-weg"

Unique Slugs

from philiprehberger_slug import unique_slugify

existing = {"hello-world", "hello-world-2"}
unique_slugify("Hello World", existing)  # "hello-world-3"

Validate a slug

from philiprehberger_slug import is_valid_slug

is_valid_slug("hello-world")    # True
is_valid_slug("Hello World")    # False
is_valid_slug("--bad--")        # False
is_valid_slug("hello_world", separator="_")  # True

Strip HTML

from philiprehberger_slug import strip_html

strip_html("<p>Hello <b>World</b></p>")  # "Hello World"

Bulk Slugify

from philiprehberger_slug import slugify_bulk

titles = ["Hello World", "Über München", "C++ & Friends"]
slugify_bulk(titles)
# ["hello-world", "uber-munchen", "c-and-friends"]

# Cap length per slug
slugify_bulk(["Long article title here"], max_length=10)
# ["long"]

API

Function / Class Description
slugify(text, separator, max_length, lowercase, reserved, transliterate) Generate a URL-safe slug from text
slugify_bulk(texts, separator, max_length, lowercase, reserved, transliterate) Slugify a batch of strings with the same settings
slug_from_parts(*parts, separator) Join multiple strings into a single slug
unique_slugify(text, existing, separator, max_length) Generate a unique slug with numeric suffix
is_valid_slug(text, separator) Return True if text is already in canonical slug form
strip_html(text) Remove HTML tags from text
ReservedSlugError Raised when a slug matches a reserved word

Development

pip install -e .
python -m pytest tests/ -v

Support

If you find this project useful:

Star the repo

🐛 Report issues

💡 Suggest features

❤️ Sponsor development

🌐 All Open Source Projects

💻 GitHub Profile

🔗 LinkedIn Profile

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

philiprehberger_slug-0.4.0.tar.gz (181.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

philiprehberger_slug-0.4.0-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file philiprehberger_slug-0.4.0.tar.gz.

File metadata

  • Download URL: philiprehberger_slug-0.4.0.tar.gz
  • Upload date:
  • Size: 181.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for philiprehberger_slug-0.4.0.tar.gz
Algorithm Hash digest
SHA256 1db8a2f0aea6d32272fdc2edd6fab5bf47d21c0b8e2c96b557d90df5d21955b5
MD5 5917da20cc53d423234f5094b5c6ba10
BLAKE2b-256 721ad3be1e6c63a3218298cb10ce41017c94fe6655abc316a07d487ebed2af67

See more details on using hashes here.

File details

Details for the file philiprehberger_slug-0.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for philiprehberger_slug-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a8bb1db88c08c0249899be130b925b37bc6e0d72b77479b893e7ed85386c0deb
MD5 336910ac32050dbee0466145f092248c
BLAKE2b-256 922a78c1f57cd7d9d12cc8a534acbbc7949a79179fdb84559476b9a1c68e2c75

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page