{"id":17560143,"url":"https://github.com/vd2org/jinja2utils","last_synced_at":"2026-02-04T06:36:19.182Z","repository":{"id":224527491,"uuid":"763505388","full_name":"vd2org/jinja2utils","owner":"vd2org","description":"Collection of utils for jinja2.","archived":false,"fork":false,"pushed_at":"2024-02-26T14:41:58.000Z","size":20,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-10T10:18:07.502Z","etag":null,"topics":["elapsed","jinja2","jinja2-extention","jinja2-template","plural","pluralize","remaining","template","uchar","unicode"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vd2org.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-02-26T12:28:22.000Z","updated_at":"2024-11-01T12:34:34.000Z","dependencies_parsed_at":null,"dependency_job_id":"a946eb89-23e4-4c19-a364-28d076f71a09","html_url":"https://github.com/vd2org/jinja2utils","commit_stats":null,"previous_names":["vd2org/jinja2utils"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/vd2org/jinja2utils","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vd2org%2Fjinja2utils","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vd2org%2Fjinja2utils/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vd2org%2Fjinja2utils/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vd2org%2Fjinja2utils/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vd2org","download_url":"https://codeload.github.com/vd2org/jinja2utils/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vd2org%2Fjinja2utils/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264579699,"owners_count":23631575,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["elapsed","jinja2","jinja2-extention","jinja2-template","plural","pluralize","remaining","template","uchar","unicode"],"created_at":"2024-10-21T11:23:49.928Z","updated_at":"2026-02-04T06:36:19.152Z","avatar_url":"https://github.com/vd2org.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# jinja2utils\n\nUseful utils for jinja2\n\n## Install\n\n```bash\npip install jinja2utils\n```\n\n### Related packages:\n\n- [YamlLoader for jinja2 template framework](https://github.com/vd2org/jinja2yaml)\n\n## t_factory\n\nt_factory is a small tool which helps prefixed templates easily.\n\nSee examples below.\n\n#### Example:\n\n- ./templates/en/home/welcome\n\n```text\nWelcome, {{username}}!\n```\n\n- ./templates/en/home/goodbye\n\n```text\nWelcome, {{username}}!\n```\n\n- ./templates/ru/home/welcome\n\n```text\nWelcome, {{username}}!\n```\n\n- ./templates/ru/home/goodbye\n\n```text\nGoodbye, {{username}}!\n```\n\n- ./main.py\n\n```python\nfrom jinja2 import Environment, PrefixLoader, FileSystemLoader\nfrom jinja2utils import t_factory\n\nloader = PrefixLoader({\n    'en': FileSystemLoader('./templates/en'),\n    'ru': FileSystemLoader('./templates/ru'),\n})\n\njinja = Environment(loader=loader)\nget_t = t_factory(jinja)\n\n\ndef print_templates(t, username):\n    rendered1 = t('home/welcome', username=username)\n    print(rendered1)\n\n    rendered2 = t('home/goodbye', username=username)\n    print(rendered2)\n\n\nprint_templates(get_t('en'), 'John Doe')\n# Expected output:\n# Welcome, John Doe!\n# Goodbye, John Doe!\n\nprint_templates(get_t('ru'), 'Иван')\n# Expected output:\n# Привет, Иван!\n# Пока, Иван!\n``` \n\n## plural\n\n`plural` is jinja2 filter function for easy text pluralization.\n\n#### Example:\n\n- ./templates/info/users\n\n```text\nSystem have {{users}} active {{users|plural('en','user','users')}}.\n```\n\n```python\n# main.py\nfrom jinja2 import Environment, FileSystemLoader\nfrom jinja2utils import plural\n\njinja = Environment(loader=FileSystemLoader('./templates'))\njinja.filters['plural'] = plural\n\ntemplate1 = jinja.get_template('info/users')\nrendered1 = template1.render(users=1)\nprint(rendered1)  # System have 1 active user.\nrendered2 = template1.render(users=23)\nprint(rendered2)  # System have 23 active users.\n``` \n\n## elapsed and remaining\n\nCalculates and formats elapsed time to string like this:\n`25d 4h 3m 35s`. Can be used as jinja2 filter.\n\n#### Example:\n\n- ./templates/info\n\n```text\nSystem uptime: {{started|elapsed(show_seconds=True)}}.\n``` \n\n- ./templates/newyear\n\n```text\nSystem uptime: {{started|elapsed(show_seconds=True)}}.\n```\n\n```python\n# main.py\nfrom jinja2 import Environment, FileSystemLoader\nfrom jinja2utils import elapsed, remaining\nimport datetime\n\njinja = Environment(loader=FileSystemLoader('./templates'))\njinja.filters['elapsed'] = elapsed\njinja.filters['remaining'] = remaining\n\nstarted = datetime.datetime.now()\nnewyear = datetime.datetime(2025, 1, 1, 0, 0, 0)\n\nusername = 'John Doe'\ntemplate1 = jinja.get_template('info/uptime')\nrendered1 = template1.render(started=started)\nprint(rendered1)  # System uptime: 25d 4h 3m 35s.\n\ntemplate2 = jinja.get_template('info/newyear')\nrendered2 = template2.render(newyear=newyear)\nprint(rendered2)  # To next year remaining 295d 10h 13m 10s!\n``` \n\n## uchar\n\nSimple jinja2 function to insert unicode characters\nby unicode names. Very useful for inserting emoji.\n\n#### Example:\n\n- ./templates/info/users\n\n```text\nWelcome, {{username}} {{UN('THUMBS UP SIGN')}}!\n```\n\n```python\n# main.py\nfrom jinja2 import Environment, FileSystemLoader\nfrom jinja2utils import uchar\n\njinja = Environment(loader=FileSystemLoader('./templates'))\njinja.globals['UN'] = uchar\n\ntemplate1 = jinja.get_template('info/users')\nrendered1 = template1.render(username='John Doe')\nprint(rendered1)  # Welcome, John Doe 👍!\n``` \n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvd2org%2Fjinja2utils","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvd2org%2Fjinja2utils","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvd2org%2Fjinja2utils/lists"}