{% include %} 태그 Django의 하위 템플릿에 변수 할당


90

이 코드가 있습니다 (예상 결과를 얻지 못함).

#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?
Besnik 2012

답변:


219

@Besnik이 제안한 것처럼 매우 간단합니다.

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

이에 대한 문서include 는 이것을 언급합니다. 또한 only다른 변수를 상속하지 않고 주어진 변수로만 템플릿을 렌더링하는 데 사용할 수 있다고 언급 합니다.

감사합니다 @Besnik


4
완전성을 위해 주어진 변수로만 템플릿을 렌더링하려는 경우 (부모 컨텍스트를 상속하지 않음) "only"옵션을 추가 할 수 있습니다. {% include "path / to / template.html"with form = form only}}
gonz

8
다시 한 번 완전성을 위해 "with"에 대한 링크가 있습니다. docs.djangoproject.com/en/1.8/ref/templates/builtins/#include
Timo

내보기를 반환하는 경우 @Vor context["these_items"]context["other_items"]내가 사용할 수는,이 함께 포함 대체하기 {% for item in these_items %}{% for item in other_items %}?
GiannisIordanou

어떤 이유로 변수 이름에 _가 있으면 작동하지 않습니다. 예 : {% include "subject_file_upload.html"with my_form = form foo = bar %}. 이것에 대한 설명이 있습니까?
Alan Tygel 19 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.