Eu tenho este código (que não me dá o resultado esperado)
#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>
modelo filho:
#subject_file_upload.html
<form action="." method="post" enctype="multipart/form-data">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="submit">
</form>
e minha visão
#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))
O código acima cria HTML da maneira que eu quero, porém o formulário não atualiza o banco de dados.
MAS,
Se eu pular o modelo do meio e for diretamente para o formulário de upload, funcionará bem:
#subject_content.html
{% block main-menu %}
{% include "subject_file_upload.html" %}
{% endblock %}
Ajude-me por favor a fazê-lo funcionar com o modelo do meio. Quero fazer isso porque não quero digitar o mesmo código mais de uma vez.
include
comwith
?Respostas:
Como sugeriu @Besnik, é muito simples:
{% include "subject_file_upload.html" with form=form foo=bar %}
A documentação
include
menciona isso. Ele também menciona que você pode usaronly
para renderizar o modelo apenas com as variáveis fornecidas, sem herdar nenhuma outra variável.Obrigado @Besnik
fonte
context["these_items"]
econtext["other_items"]
, posso usar incluir com isso para substituir{% for item in these_items %}
por{% for item in other_items %}
?