You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中根据N动态生成文本框并处理request.POST数据

Solução para Gerar N Campos Dinâmicos e Processar Dados no Django

Passo 1: Atualizar a View (views.py)

Substitua sua função valores por essa versão, que lida com a entrada de N, geração de campos e processamento dos dados:

def valores(request):
    if request.method == 'POST':
        # Tratar envio do número N
        if 'N' in request.POST:
            try:
                N = int(request.POST['N'])
                if N <= 0:
                    return render(request, 'pacote.html', {'res': 'N deve ser um número positivo.'})
                # Passar N e intervalo para o template gerar campos
                return render(request, 'pacote.html', {'N': N, 'range_N': range(N)})
            except ValueError:
                return render(request, 'pacote.html', {'res': 'Por favor, insira um número válido para N.'})
        
        # Tratar envio dos valores de peso e preço
        else:
            peso_unitario = []
            preco_unitario = []
            try:
                N = int(request.POST['N'])
            except (KeyError, ValueError):
                return render(request, 'pacote.html', {'res': 'Erro ao processar N.'})
            
            for i in range(N):
                peso_key = f'peso_u_{i}'
                preco_key = f'preco_u_{i}'
                
                peso_u = request.POST.get(peso_key, '')
                preco_u = request.POST.get(preco_key, '')
                
                if not peso_u.isdigit() or not preco_u.isdigit():
                    return render(request, 'pacote.html', {
                        'res': f'Apenas números são permitidos no par {i+1}.',
                        'N': N,
                        'range_N': range(N)
                    })
                
                peso_unitario.append(int(peso_u))
                preco_unitario.append(int(preco_u))
            
            # Preparar valores combinados para o template
            valores_combinados = list(zip(peso_unitario, preco_unitario))
            return render(request, 'pacote.html', {
                'valores': valores_combinados,
                'N': N,
                'range_N': range(N)
            })
    
    # Requisição GET: exibir formulário inicial de N
    return render(request, 'pacote.html')

Passo 2: Atualizar o Template (pacote.html)

Esse template exibe o formulário de N, gera os campos dinâmicos e mostra os resultados:

<!DOCTYPE html>
<html>
<head>
    <title>Gerenciar Valores</title>
</head>
<body>
    {% if res %}
        <p style="color: red;">{{ res }}</p>
    {% endif %}

    <!-- Formulário inicial para inserir N -->
    {% if not N and not valores %}
        <form method="POST">
            {% csrf_token %}
            <label for="N">Número de pares de campos:</label>
            <input type="number" name="N" id="N" min="1" required>
            <button type="submit">Gerar campos</button>
        </form>
    {% endif %}

    <!-- Campos dinâmicos para peso e preço -->
    {% if N and not valores %}
        <form method="POST">
            {% csrf_token %}
            <input type="hidden" name="N" value="{{ N }}">
            <h3>Preencha {{ N }} pares de valores:</h3>
            {% for i in range_N %}
                <div style="margin: 10px 0;">
                    <label>Par {{ i+1 }}:</label>
                    <input type="number" name="peso_u_{{ i }}" placeholder="Peso" min="1" required>
                    <input type="number" name="preco_u_{{ i }}" placeholder="Preço" min="1" required>
                </div>
            {% endfor %}
            <button type="submit">Enviar valores</button>
        </form>
    {% endif %}

    <!-- Exibir resultados -->
    {% if valores %}
        <h3>Valores inseridos com sucesso:</h3>
        <ul>
            {% for peso, preco in valores %}
                <li>Peso: {{ peso }}, Preço: {{ preco }}</li>
            {% endfor %}
        </ul>
        <a href="{% url 'valores' %}">Voltar para inserir novo N</a>
    {% endif %}
</body>
</html>

Passo 3: Configurar a URL (urls.py)

Certifique-se de que a URL está mapeada corretamente:

from django.urls import path
from . import views

urlpatterns = [
    path('valores/', views.valores, name='valores'),
]

Principais Funcionalidades:

  • Sem variáveis globais: Usa variáveis locais para evitar conflitos entre usuários.
  • Validação: Verifica que N é um número positivo e que todos os campos de peso/preço são números.
  • Campos dinâmicos: Gera N pares de campos usando um loop no template, cada um com um nome único (ex: peso_u_0, preco_u_1).
  • Tratamento de erros: Retorna mensagens claras quando há entradas inválidas, mantendo o formulário preenchido para correção.

内容的提问来源于stack exchange,提问作者Lucas Felipe Casagrande de A.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 00:24:17