101 votes

Affecter des variables au modèle enfant dans la balise {% include %} Django

J'ai ce code (qui ne me donne pas le résultat attendu)

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

modèle enfant :

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

et mon point de vue

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

Le code ci-dessus crée le HTML comme je le souhaite, mais le formulaire ne met pas à jour la base de données.

MAIS,

Si je saute le modèle intermédiaire et que je passe directement au formulaire de téléchargement, tout fonctionne bien :

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

Aidez-moi s'il vous plaît à le faire fonctionner avec le modèle du milieu. Je veux faire cela, car je ne veux pas taper le même code plus d'une fois.

256voto

Vor Points 3342

Comme @Besnik l'a suggéré, c'est assez simple :

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

Le site la documentation pour include le mentionne. Il est également mentionné que vous pouvez utiliser only pour rendre le modèle avec les variables données uniquement, sans hériter des autres variables.

Merci @Besnik

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X