Executando verificação de segurança...
2

[DJANGO] Ícones para Django a partir dos ícones do Figma, fácil e rápido.

VIDEO AULA | CURTE | COMPARTILHA

Vamos criar nossa própria bibliotéca de ícones costumisáveis, utilizando tailwindcss, slippers,django,figma?

requirements.txt

django
slippers

Primeiramenta vou deixar o link do icones que consegui da comunidade do figma Clique aqui..

Pastas

.
└── BASE_DIR/
    ├── core/
    │   ├── apps/
    │   │   └── core/
    │   │       ├── ...
    │   │       ├── urls.py
    │   │       └── views.py
    │   ├── backend/
    │   │   ├── urls.py
    │   │   └── settings.py
    │   ├── manage.py
    │   └── templates/
    │       ├── interface/
    │       │   └── icons/
    │       │       └── ...
    │       ├── components.yaml
    │       └── index.html
    ├── icons-svg/
    ├── icons-html
    └── converter.py

converter.py

import os
from pathlib import Path


def remove_fill_attr_and_add_class_attr(file_path, new_path):
    """
    Primeiramente vamos ler o arquivo, e fazer o replace do seguinte código
    'xmlns="http://www.w3.org/2000/svg"' => 'xmlns="http://www.w3.org/2000/svg" class="{{class}}"'

    Posteriormente vamos retirar todos os fills do código, para isso precisamos
    verificar as cores padrões dos nossos icons, interessante sempre colocar
    cores padrões no figma.

    Fazer o replace dos attrs "fill" com os valores abaixo
    ''fill="#374957"' e 'fill="white"' => "" (empty str)

    E sobrescrever em outro local, com a extensão '.html', també reescrevendo
    o nome do icon, e gerando um documento com o seguinte texto:

    nome_do_icon: "path/to/icon/folder"

    """
    for filename in os.listdir(file_path):
        with open(file_path / filename, "r") as rfile:
            content = rfile.read()
            content = content.replace(
                'xmlns="http://www.w3.org/2000/svg"',
                'xmlns="http://www.w3.org/2000/svg" class="{{class}}"',
            )

            content = content.replace('fill="#374957"', "")
            content = content.replace('fill="white"', "")

            extract_filename = rfile.name.split("\\")[-1].split(".")[0]
            filename = "".join(extract_filename.split("-")[2:]) + ".html"
            re_new_path = os.path.join(new_path, filename)

        with open("components.yaml", "a+") as yaml_file:
            text = "%s: %s%s\n" % (
                "".join(extract_filename.split("-")[2:]),
                "interface/icons/",
                filename,
            )
            yaml_file.write(text)

        with open(re_new_path, "w") as wfile:
            wfile.write(content)


BASE_DIR = Path(__file__).resolve().parent
ICONS_SVG_PATH = BASE_DIR / "icons-svg/"
ICONS_HTML_PATH = BASE_DIR / "icons-html/"

remove_fill_attr_and_add_class_attr(ICONS_SVG_PATH, ICONS_HTML_PATH)

Fazer as alterações necessárias, e jogar os arquivos da pasta icons-html para templates/interface/icons. O arquivo components.yaml dentro da pasta templates, deve ficar da seguinte forma.

components:
  add: interface/icons/add.html
  addressbook: interface/icons/addressbook.html
  ...

Sua view deve ficar da seguinte forma.

{% load static %}
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <!-- TAILWINDCSS CDN -->
    <script src="https://cdn.tailwindcss.com"></script>
    <script>
      tailwind.config = {

      }
    </script>
</head>
<body>
    {% #add class="fill-zinc-900 w-12 h-12" %}
    {% /add %}

    {% add class="fill-red  -900 w-12 h-12" %}
</body>
</html>

Finalizado, seu ícone está pronto, basta ser feliz.

Carregando publicação patrocinada...
1

Excelente resultado os svg disponibilizados!
Agora só falta uma boa alma que considere realizar algum trabalho tão refinado com ícones para data science...