mirror of
https://github.com/vinta/awesome-python.git
synced 2026-05-08 14:48:57 -05:00
The category template rendered a tag for `category.name` plus a tag for `entry.groups[0]`, which duplicated the group name on group pages where those values are identical (e.g. /categories/python-language/ showing "Python Language" twice). It also never rendered `entry.categories`, so group pages omitted each project's actual category. Mirror the index template's tag rendering on category, group, and subcategory pages, and mark whichever tag matches the current page URL as active. Pass `category_urls` and `current_path` to each render call so the template can match by URL.
212 lines
7.9 KiB
HTML
212 lines
7.9 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}{{ category.name }} Python Libraries | Awesome Python{% endblock %}
|
|
{% block description %}Explore {{ entries | length }} curated Python projects in {{ category.name }}. {% if category.description %}{{ category.description }}{% else %}Part of the Awesome Python catalog.{% endif %}{% endblock %}
|
|
{% block canonical_url %}{{ category_url }}{% endblock %}
|
|
{% block alternate_links %}{% endblock %}
|
|
{% block header %}
|
|
<header class="category-hero">
|
|
<div class="hero-sheen" aria-hidden="true"></div>
|
|
<div class="hero-noise" aria-hidden="true"></div>
|
|
|
|
<div class="category-hero-shell">
|
|
<nav class="hero-topbar category-topbar" aria-label="Site">
|
|
<a href="/" class="hero-brand-mini">Awesome Python</a>
|
|
<div class="hero-topbar-actions">
|
|
<a href="/#library-index" class="hero-topbar-link">All projects</a>
|
|
<a
|
|
href="https://github.com/vinta/awesome-python/blob/master/CONTRIBUTING.md"
|
|
class="hero-topbar-link hero-topbar-link-strong"
|
|
target="_blank"
|
|
rel="noopener"
|
|
>Submit a project</a
|
|
>
|
|
</div>
|
|
</nav>
|
|
|
|
<div class="category-hero-copy">
|
|
{% if page_kind == "subcategory" and parent_category %}
|
|
<p class="category-breadcrumb">
|
|
<a href="/categories/{{ parent_category.slug }}/">{{ parent_category.name }}</a>
|
|
</p>
|
|
{% endif %}
|
|
<h1>{{ category.name }}</h1>
|
|
{% if category.description_html %}
|
|
<p class="category-subtitle">{{ category.description_html | safe }}</p>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</header>
|
|
{% endblock %}
|
|
{% block content %}
|
|
<section class="results-section category-results" id="category-index">
|
|
<div class="results-intro section-shell" data-reveal>
|
|
<div>
|
|
<h2>Python Projects in {{ category.name }}</h2>
|
|
</div>
|
|
<p class="results-note">
|
|
Sorted by GitHub stars when available. Click any row for details.
|
|
</p>
|
|
</div>
|
|
|
|
<h2 class="sr-only">{{ category.name }} results</h2>
|
|
<div
|
|
class="table-wrap"
|
|
tabindex="0"
|
|
role="region"
|
|
aria-label="{{ category.name }} libraries table"
|
|
>
|
|
<table class="table category-table">
|
|
<thead>
|
|
<tr>
|
|
<th class="col-num"><span class="sr-only">Row number</span></th>
|
|
<th class="col-name" data-sort="name">
|
|
<button type="button" class="sort-btn">Project Name</button>
|
|
</th>
|
|
<th class="col-stars" data-sort="stars">
|
|
<button type="button" class="sort-btn">GitHub Stars</button>
|
|
</th>
|
|
<th class="col-commit" data-sort="commit-time">
|
|
<button type="button" class="sort-btn">Last Commit</button>
|
|
</th>
|
|
<th class="col-cat">Tags</th>
|
|
<th class="col-arrow"><span class="sr-only">Details</span></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for entry in entries %}
|
|
<tr
|
|
class="row"
|
|
data-tags="{{ entry.categories | join('||') }}{% if entry.subcategories %}||{{ entry.subcategories | map(attribute='value') | join('||') }}{% endif %}||{{ entry.groups | join('||') }}{% if entry.source_type == 'Built-in' %}||Built-in{% endif %}"
|
|
tabindex="0"
|
|
aria-expanded="false"
|
|
aria-controls="category-expand-{{ loop.index }}"
|
|
>
|
|
<td class="col-num">{{ loop.index }}</td>
|
|
<td class="col-name">
|
|
<a href="{{ entry.url }}" target="_blank" rel="noopener"
|
|
>{{ entry.name }}</a
|
|
>
|
|
{% if entry.description %}
|
|
<span class="category-row-desc">{{ entry.description | safe }}</span>
|
|
{% endif %}
|
|
<span class="mobile-cat"
|
|
>{% if entry.subcategories %}{{ entry.subcategories[0].name }}{%
|
|
else %}{{ category.name }}{% endif %}</span
|
|
>
|
|
</td>
|
|
<td class="col-stars">
|
|
{% if entry.stars is not none %}{{ "{:,}".format(entry.stars) }}{%
|
|
elif entry.source_type %}<span class="source-badge"
|
|
>{{ entry.source_type }}</span
|
|
>{% else %}—{% endif %}
|
|
</td>
|
|
<td
|
|
class="col-commit"
|
|
{%
|
|
if
|
|
entry.last_commit_at
|
|
%}data-commit="{{ entry.last_commit_at }}"
|
|
{%
|
|
endif
|
|
%}
|
|
>
|
|
{% if entry.last_commit_at %}<time
|
|
datetime="{{ entry.last_commit_at }}"
|
|
>{{ entry.last_commit_at[:10] }}</time
|
|
>{% else %}—{% endif %}
|
|
</td>
|
|
<td class="col-cat">
|
|
{% for subcat in entry.subcategories %}
|
|
<button class="tag{% if subcat.url == current_path %} active{% endif %}" data-value="{{ subcat.value }}" data-url="{{ subcat.url }}">
|
|
{{ subcat.name }}
|
|
</button>
|
|
{% endfor %}
|
|
{% for cat in entry.categories %}
|
|
<a
|
|
class="tag{% if category_urls[cat] == current_path %} active{% endif %}"
|
|
href="{{ category_urls[cat] }}"
|
|
data-value="{{ cat }}"
|
|
data-url="{{ category_urls[cat] }}"
|
|
>{{ cat }}</a
|
|
>
|
|
{% endfor %}
|
|
{% if entry.groups %}
|
|
{% set group_url = "/categories/" ~ (entry.groups[0] | slugify) ~ "/" %}
|
|
<button
|
|
class="tag tag-group{% if group_url == current_path %} active{% endif %}"
|
|
data-value="{{ entry.groups[0] }}"
|
|
data-url="{{ group_url }}"
|
|
>
|
|
{{ entry.groups[0] }}
|
|
</button>
|
|
{% endif %}
|
|
{% if entry.source_type == 'Built-in' %}
|
|
<button class="tag tag-source" data-value="Built-in">
|
|
Built-in
|
|
</button>
|
|
{% endif %}
|
|
</td>
|
|
<td class="col-arrow"><span class="arrow">→</span></td>
|
|
</tr>
|
|
<tr class="expand-row" id="category-expand-{{ loop.index }}">
|
|
<td></td>
|
|
<td colspan="4">
|
|
<div class="expand-content">
|
|
{% if entry.also_see %}
|
|
<div class="expand-also-see">
|
|
Also see: {% for see in entry.also_see %}<a
|
|
href="{{ see.url }}"
|
|
target="_blank"
|
|
rel="noopener"
|
|
>{{ see.name }}</a
|
|
>{% if not loop.last %}, {% endif %}{% endfor %}
|
|
</div>
|
|
{% endif %}
|
|
<div class="expand-meta">
|
|
{% if entry.owner %}<a
|
|
href="https://github.com/{{ entry.owner }}"
|
|
target="_blank"
|
|
rel="noopener"
|
|
>{{ entry.owner }}</a
|
|
><span class="expand-sep">/</span>{% endif %}<a
|
|
href="{{ entry.url }}"
|
|
target="_blank"
|
|
rel="noopener"
|
|
>{{ entry.url | replace("https://", "") }}</a
|
|
>
|
|
{% if entry.last_commit_at %}<span class="expand-commit"
|
|
><span class="expand-sep">/</span
|
|
><time datetime="{{ entry.last_commit_at }}"
|
|
>{{ entry.last_commit_at[:10] }}</time
|
|
></span
|
|
>{% endif %}
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<td></td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</section>
|
|
|
|
<section class="final-cta" data-reveal>
|
|
<div class="section-shell">
|
|
<p class="section-label">Contribute</p>
|
|
<h2>Know a project that belongs here?</h2>
|
|
<p>Tell us what it does and why it stands out.</p>
|
|
<div class="final-cta-actions">
|
|
<a
|
|
href="https://github.com/vinta/awesome-python/blob/master/CONTRIBUTING.md"
|
|
class="hero-action hero-action-primary"
|
|
target="_blank"
|
|
rel="noopener"
|
|
>Submit a project</a
|
|
>
|
|
<a href="/" class="hero-action hero-action-secondary">Browse all</a>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
{% endblock %}
|