Призначте змінні дочірньому шаблону в тегу {% include%} Django


89

У мене є цей код (який не дає мені очікуваного результату)

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

дочірній шаблон:

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

і мій погляд

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

Наведений вище код створює HTML так, як я хочу, але форма не оновлює базу даних.

АЛЕ,

Якщо я пропускаю середній шаблон і переходжу безпосередньо до форми для завантаження, це чудово працює:

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

Допоможіть мені, будь ласка, щоб це працювало із середнім шаблоном. Я хочу зробити це, тому що не хочу вводити той самий код більше одного разу.


13
Ви пробували використовувати includeс with?
Бесник

Відповіді:


215

Як запропонував @Besnik, це досить просто:

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

Про це згадується в документаціїinclude . У ньому також згадується, що ви можете використовувати onlyвізуалізацію шаблону лише із заданими змінними, без успадкування будь-яких інших змінних.

Дякую @Besnik


4
Для повноти зверніть увагу, що якщо ви хочете відобразити шаблон лише з заданими змінними (і не успадковує батьківський контекст), ви можете додати параметр "only": {% include "path / to / template.html" with form = лише форма}}
gonz

8
Знову для повноти, ось посилання на "з": docs.djangoproject.com/en/1.8/ref/templates/builtins/#include
Тимо

@Vor Якщо мій погляд повертається context["these_items"]і context["other_items"], чи можу я використовувати include with this для заміни {% for item in these_items %}на {% for item in other_items %}?
GiannisIordanou

з якоїсь причини, якщо змінна має в назві _, це не працює. Приклад: {% include "subject_file_upload.html" with my_form = form foo = bar%}. Будь-яке пояснення цьому?
Алан Тайгел,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.