1
resposta

Image not loaded

Ao fazer a inserção da capa pela primeira vez, quando abro no arquivo "uploads" para verificação da imagem, da tudo certo... Porém, quando atualizo a capa e vou fazer a verificação novamente, aparece o seguinte erro: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Fora que, toda vez que atualizo algo a mais além da imagem, quando volto para o "editar" ele da erro na imagem e não aparece nada, segue o resultado abaixo: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Códigos abaixo:

# Página para editar
@app.route('/editar/<int:id>')  # Página para cadastrar novo jogo (só acessa se estiver logado)
def editar(id):
    if 'usuario_logado' not in session or session['usuario_logado'] is None:                       # Verifica se está logado
        return redirect(url_for('login', proxima=url_for('editar', id=id)))               # Redireciona para login se não estiver
    jogo = Jogos.query.filter_by(id=id).first()
    capa_jogo = recupera_imagem(id)
    return render_template('editar.html', titulo='Editando Jogo', jogo=jogo, capa_jogo=capa_jogo) # Renderiza o formulário de cadastro

@app.route('/atualizar', methods=['POST'])        # Recebe dados via POST
def atualizar():
    jogo = Jogos.query.filter_by(id=request.form['id']).first()
    jogo.nome = request.form['nome']
    jogo.categoria = request.form['categoria']
    jogo.console = request.form['console']
    db.session.add(jogo)
    db.session.commit()

    arquivo = request.files['arquivo']
    upload_path = app.config['UPLOADS_PATH']
    timestamp = time.time()
    deleta_arquivo(jogo.id)
    arquivo.save(f'{upload_path}/capa{jogo.id}-{timestamp}.jpg')

    return redirect(url_for('index'))

@app.route('/deletar/<int:id>')
def deletar(id):
    if 'usuario_logado' not in session or session['usuario_logado'] is None:                       # Verifica se está logado
        return redirect(url_for('login'))

    Jogos.query.filter_by(id=id).delete()
    db.session.commit()
    deleta_arquivo(id)
    flash(f'Jogo deletado com sucesso!')
    return redirect(url_for('index'))
import os
from jogoTeca import app

def recupera_imagem(id):
    for nome_arquivo in os.listdir(app.config['UPLOADS_PATH']):
        if f'capa{id}' in nome_arquivo:
            return nome_arquivo
    return 'capa_padrao.jpg'  # Um fallback se não encontrar


def deleta_arquivo(id):
    arquivo = recupera_imagem(id)
    if arquivo != 'capa_padrao.jpg':
        os.remove(os.path.join(app.config['UPLOADS_PATH'], arquivo))
{# Informa que este template herda de "template.html", que é o arquivo base (estrutura principal do layout) #}
{% extends "template.html" %}

{# Início do bloco chamado 'conteudo', que será inserido no local correspondente do template base #}
{% block conteudo %}

    <!-- Formulário que envia os dados para a rota "/criar" usando o método POST -->
    <form action="{{ url_for('atualizar') }}" method="post" enctype="multipart/form-data">
        <figure class="img-thumbnail col-md-4">
            <img class="img-fluid" src="{{ url_for('imagem', nome_arquivo=capa_jogo) }}">
            <figcaption>
                <label class="fileContainer">
                    Adicionar Capa
                    <input type="file" name="arquivo" accept=".jpg">
                </label>
            </figcaption>
        </figure>
        <fieldset> <!-- Agrupamento lógico de campos do formulário -->
            <input type="hidden" name="id" value="{{ jogo.id }}">
            <!-- Campo: Nome do jogo -->
            <div class="form-group">
                <label for="nome">Nome</label> <!-- Rótulo do campo -->
                <!-- Campo de entrada de texto para o nome do jogo -->
                <input type="text" id="nome" name="nome" class="form-control" value="{{ jogo.nome }}">
            </div>

            <!-- Campo: Categoria do jogo -->
            <div class="form-group">
                <label for="categoria">Categoria</label> <!-- Rótulo -->
                <input type="text" id="categoria" name="categoria" class="form-control" value="{{ jogo.categoria }}">
            </div>

            <!-- Campo: Console do jogo -->
            <div class="form-group">
                <label for="console">Console</label> <!-- Rótulo -->
                <input type="text" id="console" name="console" class="form-control" value="{{ jogo.console }}">
            </div>

            <!-- Botão para enviar os dados preenchidos no formulário -->
            <button type="submit" class="btn btn-primary btn-salvar">Salvar</button>
        </fieldset>
    </form>

{% endblock %}
1 resposta

Experimenta renomear a pasta "uploads" onde fica a imagem para "public". Isso resolveu quando enfrentei um problema parecido