2012-07-24 9 views
50

ho questo codice (che non mi dà risultato atteso) modellovariabili Assegnare template figlio in {% includono%} tag 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> 

bambino:

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

e la mia 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)) 

il codice precedente crea HTML nel modo in cui voglio che sia, ma il modulo non aggiornare il database.

MA,

Se mi salta la mascherina centrale e passare direttamente al modulo di upload, funziona benissimo:

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

Help me please per farlo funzionare con il modello centrale. Voglio farlo, perché non voglio digitare lo stesso codice più di una volta.

+12

Hai provato a usare il comando 'include' con' with'? – Besnik

+0

@Besnik Grazie !!!! Funziona!!! – Vor

risposta

127

Come @Besnik suggerito, è abbastanza semplice:

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

Il documentation for include menzioni questo. Indica inoltre che è possibile utilizzare only per eseguire il rendering del modello solo con le variabili specificate, senza ereditare altre variabili.

Grazie @Besnik

+3

Per completezza nota che se vuoi rendere il template solo con le variabili date (e non eredita il contesto genitore) puoi aggiungere l'opzione "only": {% include "path/to/template.html" con modulo = solo modulo}} – gonz

+8

Per completezza, ecco il link a "con": https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#include – Timo

+0

Nota storica: https: // code .djangoproject.com/ticket/7817 – Paolo

Problemi correlati