2012-07-24 9 views
50

mam ten kod (który nie daje mi oczekiwany wynik) szablonzmienne przypisać do szablonu dziecko w {% obejmują%} 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> 

dziecko:

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

i moim zdaniem

#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)) 

Powyższy kod tworzy kod HTML w taki sposób, jak chcę, jednak formularz nie aktualizuje bazy danych.

ALE

Jeśli pominąć środkowy szablonu i przejść bezpośrednio do formularza przesyłania, to działa dobrze:

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

Proszę mi pomóc, aby pracować ze środkowej szablonu. Chcę to zrobić, ponieważ nie będę musiał wpisywać tego samego kodu więcej niż raz.

+12

Czy próbowałeś użyć 'include' z' with'? – Besnik

+0

@Besnik Dziękujemy! To działa!!! – Vor

Odpowiedz

127

Jak @Besnik zasugerował, że to całkiem proste:

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

documentation for include wspomina o tym. Wspomina również, że można użyć only do renderowania szablonu tylko z podanymi zmiennymi, bez dziedziczenia innych zmiennych.

Dziękujemy @Besnik

+3

Dla uzupełnienia należy pamiętać, że jeśli chcesz renderować szablon tylko z podanymi zmiennymi (i nie dziedziczy kontekstu nadrzędnego), możesz dodać opcję "only": {% include "path/to/template.html" with form = tylko formularz}} – gonz

+8

Dla uzupełnienia, tutaj jest link do "z": https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#include – Timo

+0

Notka historyczna: https: // kod .djangoproject.com/ticket/7817 – Paolo

Powiązane problemy