2011-06-28 10 views
6

La vista genérica ha guardado mucho código para mí, pero todavía tengo que escribir plantillas de cada modelo. Tengo el mismo código en todas las plantillas, es decir,¿Hay algo así como plantillas genéricas en django como vistas genéricas

<form action="/{{type}}/{{ action }}/" method="post" enctype="multipart/form-data" > 
    {% csrf_token %} 
    {% for field in form %} 
     <div class="fieldWrapper"> 
      {{ field.errors }} 
      {{ field.label_tag }}: {{ field }} 
     </div> 
    {% endfor %} 
    <p><input type="submit" value="Submit" /></p> 
    </form> 

es decir, quiero tener todos los campos del modelo para agregar o editar.

es Hay alguna solución para tener plantilla genérica automatrically

+1

¿Por qué necesita diferentes plantillas? ¿Por qué no usar la misma plantilla para todos los modelos? No hay nada específico del modelo en el código que ha mostrado. –

+1

Pero las vistas genéricas esperan la plantilla como app/model_form.html. de lo contrario, tengo que escribir explícitamente el nombre de la plantilla allí. así que estaba pensando en lugar de escribir el nombre de la plantilla allí automáticamente – user2134226

+0

¿Cuál es el problema al escribir explícitamente el nombre de la plantilla – Arion

Respuesta

0

En Django, las plantillas pueden ser genéricos en sí !!

Usted puede utilizar una forma diferent para cada modelo dentro de la misma plantilla usando {{}} form.attribute

Here es el documento oficial de Django

+0

pero qué debo escribir en 'acción" "atributo' de la plantilla – user2134226

+0

Depende de lo que quiere que su formulario hacer... – juankysmith

1

Si tiene código de plantilla que es idéntica , se puede utilizar el include tag:

{% include "foo/bar.html" %} 

Y el código incluido puede ser modificado con variables:

{% include "name_snippet.html" with person="Jane" %} 

Incluso si el código es diferente para cada plantilla (creo que su ejemplo está hablando de formas que tienen diferentes campos, no estoy seguro), todavía se puede utilizar incluye - acaba de hacer dos bloques:

{% include "startform.html with some_action="post" %} 
    {{ field.errors }} 
    {{ field.label_tag }}: {{ field }} 
    {{ field.field2_tag }}: {{ field2 }} 
{% include "endform.html %} 

También hay template inheritance, donde puede definir una plantilla básica y heredar todas sus otras plantillas. La herencia se basa en bloques, puede anular bloques en la plantilla primaria con un nuevo código en la plantilla secundaria. Funciona muy bien.

0

Mire el ModelForm helper app. Hará un formulario de cualquier modelo que luego se puede usar en una plantilla de formulario simple.

Cuestiones relacionadas