Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

371
Visualizações
Usar variables como campos de formulario en la plantilla de formulario de Django
<here all loading of static , template_filters, crispy_forms > <form> {% for i in artifact_length %} {% with artifact_name="artifact"|artifact_name:forloop.counter0 %} {{form.artifact_name|as_crispy_field}} {% endwith %} {%endfor%} </form>

Este es un código de plantilla relacionado. Aquí quiero representar los campos de formulario con los nombres artifact_0 , artifact_1 como provenientes del formulario. La variable artifact_name dentro funciona with y devuelve los identificadores esperados artifact_0 , artifact_1 , pero quiero usar estas variables como campos de formulario para representar como as_crispy_field . El código {{form.artifact_name|as_crispy_field}} no imprime nada porque asume un formulario como campo con el nombre de artifact_name que no lo es. En su lugar, quiero usar el valor de la variable aquí.

 forms.py class Someform(forms.form): def __init__(self, artifact_obj): super().__init__() count = 0 for artifact in artifact_obj: self.fields[f'artifact_{count}'] = forms.CharField(widget=forms.NumberInput()) count += 1
 tags.py @register.filter('artifact_name') def get_artifact_name(artifact_prefix: str, counter: int): print('method', 'prefix', artifact_prefix, 'counter', counter) return f'{artifact_prefix}_{counter}'

Se está creando un formulario de longitud variable. Al igual que en forms.py , los campos de formulario se crean con artifact_count donde la cuenta puede variar de 0 a len de obj.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

No necesita usar filtros/etiquetas de plantilla, etc. para este propósito. La solución más simple sería recorrer los campos del formulario para representarlos:

 <form> {% for field in form %} {{ field|as_crispy_field }} {%endfor%} </form>

Esto recorrerá todos los campos de su formulario.

Si le preocupa especialmente el orden de estos campos, puede llamar al método de formularios order_fields :

 class Someform(forms.form): def __init__(self, artifact_obj, *args, **kwargs): super().__init__(*args, **kwargs) for count, artifact in enumerate(artifact_obj): self.fields[f'artifact_{count}'] = forms.CharField(widget=forms.NumberInput()) self.order_fields(["field_1", "field_2", ...] + [f"artifact_{i}" for i, _ in enumerate(artifact_obj)] + [..., "field_n"])

Si en particular desea representar los otros campos por separado, puede agregar un método a su formulario que le permitirá recorrer estos campos:

 class Someform(forms.form): def __init__(self, artifact_obj, *args, **kwargs): super().__init__(*args, **kwargs) for count, artifact in enumerate(artifact_obj): self.fields[f'artifact_{count}'] = forms.CharField(widget=forms.NumberInput()) self.artifact_length = len(artifact_obj) def artifact_fields(self): return [self[f'artifact_{i}'] for i in range(self.artifact_length)]

Y luego repita estos en la plantilla:

 <form> {% for field in form.artifact_fields %} {{ field|as_crispy_field }} {%endfor%} </form>
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda