{% extends "base.html" %} {% block title %}{{ category_title }}{% endblock %} {% block description %}{{ category_description }}{% endblock %} {% block canonical_url %}{{ category_url }}{% endblock %} {% block alternate_links %}{% endblock %} {% block extra_head %} {% endblock %} {% block header %}
{% if parent_category %}

{{ parent_category.name }}

{% endif %}

{{ category.name }}

{% if category.description_html %}

{{ category.description_html | safe }}

{% endif %} {% if intro_html %}
{{ intro_html | safe }}
{% endif %} {% set named_groups = entry_groups | selectattr("name") | list %} {% if (named_groups and not group_categories) or guide_html %} {% endif %}
{% if group_categories %} {% endif %}
{% endblock %} {% block content %} {% macro entry_rows(entry, index) %} {{ index }} {{ entry.name }} {% if entry.subcategories %}{{ entry.subcategories[0].name }}{% else %}{{ category.name }}{% endif %} {% if entry.downloads is not none %}{{ "{:,}".format(entry.downloads) }}{% elif entry.source_type == 'Stdlib' %}Stdlib{% elif entry.bundled %}Bundled{% elif entry.badge %}{{ entry.badge }}{% else %}Not on PyPI{% endif %} {% if entry.stars is not none %}{{ "{:,}".format(entry.stars) }}{% elif entry.source_type %}{{ entry.source_type }}{% else %}—{% endif %} {% if entry.last_commit_at %}{% else %}—{% endif %} {% for subcat in entry.subcategories %} {{ subcat.name }} {% endfor %} {% for cat in entry.categories %} {{ cat }} {% endfor %} {% if entry.groups %} {% set group_url = filter_urls[entry.groups[0]] %} {{ entry.groups[0] }} {% endif %} {% if entry.source_type == 'Stdlib' %} Stdlib {% endif %} → {% if entry.description %}
{{ entry.description | safe }}
{% endif %}
{% if entry.also_see %}
Also see: {% for see in entry.also_see %}{{ see.name }}{% if not loop.last %}, {% endif %}{% endfor %}
{% endif %}
{% if entry.owner %}{{ entry.owner }}/{% endif %}{{ entry.url | replace("https://", "") }} {% if entry.last_commit_at %}/{% endif %} {% if entry.downloads is not none %}/{{ "{:,}".format(entry.downloads) }} downloads/month{% endif %}
{% endmacro %}
{% if entry_groups %} {% set named_groups = entry_groups | selectattr("name") | list %}

{% if group_categories %}Listed by section, in editorial order.{% elif named_groups %}Listed in editorial order, grouped by use case.{% else %}Listed in editorial order.{% endif %} Click a column to re-sort the whole list.

{% else %}

{{ entries | length }} {{ category.name }} projects

{% endif %}

Press / to search. Tap a tag to filter. Click any row for details.

Search and filter

Results

{% if entry_groups %} {% set row = namespace(index=0) %} {% for group in entry_groups %} {% if group.name %} {% endif %} {% for entry in group.entries %} {% set row.index = row.index + 1 %} {{ entry_rows(entry, row.index) }} {% endfor %} {% endfor %} {% else %} {% for entry in entries %} {{ entry_rows(entry, loop.index) }} {% endfor %} {% endif %}
Row number Tags

{% if group.url %}{{ group.name }}{% else %}{{ group.name }}{% endif %} {{ group.entries | length }} project{{ "s" if group.entries | length != 1 }}

{% if guide_html %}

{{ category.name }} guide

{{ guide_html | safe }}
{% endif %}

Know a project that belongs here?

Tell us what it does and why it stands out.

{% endblock %}