Python 3.10 match & улучшенная проверка типов

В Python 3.10 произошли большие изменения, из всего, что я точно буру себе это match и улучшенную проверку типов.

def get_color(color: str) -> str:
    match color:
        case "black":
            return "#fffff"
        case "white":
            return "#00000"
        case _:   #default
            return "#green"

Проверка типов в Python 3.10

#  Новый способ проверки типов
def some(value: int | float) -> int | float:
    return value

#  Старый способ
def some(value: Union[int, float]) -> Union[int, float]:
    return value

В productiuon использую только в одном проекте, так как на хостинге из коробки ещё нет доступного Python 3.10, пришлось собрать из исходников. Не везде есть такая возможность. Ещё на всех рабочих машинах пришлось поставить Python 3.10.

В общем пользоваться можно, это примерно то же, что и при переходе на Python 3.6 из-за async, начав использовать новые фичи теряешь обратную совместимость.

Django templates короткая запись for empty

Так вышло, что не знал о более короткой записи, если список пуст. Городил if else endif, а надо было делать так:

{% for article in articles %} 
    <h1>{{ article.name }}</h1> 
    {{ article.text|safe }}
{% empty %} 
    <h1>Добавьте статью</h1> 
    <p>Ещё не написано не одной статьи</p>
{% endfor %}

Старый вариант с if else.

{% if articles %}
    {% for article in articles %} 
        <h1>{{ article.name }}</h1> 
        {{ article.text|safe }}
    {% endfor %} 
{% else %}
    <h1>Добавьте статью</h1> 
    <p>Ещё не написано не одной статьи</p>
{% endif %}

For empty в Jinja2

Увы в Jinja2 я не нашел возможности использования похожей конструкции for. В документации написано про необходимость использовать комбинации if else.