Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

372
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda