2012-07-24 9 views
50

tengo este código (que no me da resultado esperado) plantillaAsignar variables a la plantilla infantil en {% include%} etiqueta de Django

#subject_content.html 
{% block main-menu %} 
    {% include "subject_base.html" %} 
{% endblock %} 


#subject_base.html 
.... 
.... 
    <div id="homework" class="tab-section"> 
     <h2>Homework</h2> 
      {% include "subject_file_upload.html" %} 
    </div> 

niño:

#subject_file_upload.html 
    <form action="." method="post" enctype="multipart/form-data">{% csrf_token %} 
     {{ form.as_p }} 
     <input type="submit" value="submit"> 
    </form> 

y mi vista

#views.py 
@login_required 
def subject(request,username, subject): 
    if request.method == "POST": 
     form = CarsForm(request.POST, request.FILES) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect("/") 
    form = CarsForm() 
    return render_to_response('subject_content.html', {'form':form}, context_instance=RequestContext(request)) 

El código anterior crea HTML de la manera que yo quiero, sin embargo, el formulario no actualiza la base de datos.

PERO,

Si me salto la plantilla media e ir directamente al formulario de carga, que funciona bien:

#subject_content.html 
{% block main-menu %} 
    {% include "subject_file_upload.html" %} 
{% endblock %} 

Ayúdame por favor para hacer que funcione con la plantilla media. Quiero hacer esto, porque no quiero escribir el mismo código más de una vez.

+12

¿Ha intentado utilizar 'include' con' with'? – Besnik

+0

@Besnik Gracias !!!! ¡¡¡Funciona!!! – Vor

Respuesta

127

Como @Besnik sugirió, es bastante simple:

{% include "subject_file_upload.html" with form=form foo=bar %} 

El documentation for include menciones esto. También menciona que puede usar only para representar la plantilla solo con las variables dadas, sin heredar ninguna otra variable.

Gracias @Besnik

+3

Para mayor precisión, tenga en cuenta que si desea representar la plantilla solo con las variables dadas (y no hereda el contexto principal) puede agregar la opción "única": {% include "ruta/a/plantilla.html" con formulario = formulario solamente}} – gonz

+8

Para completar de nuevo, aquí está el enlace a "con": https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#include – Timo

+0

Nota histórica: https: // code .djangoproject.com/ticket/7817 – Paolo

Cuestiones relacionadas