2012-07-24 75 views
50

我有这样的代码(不给我预期的结果)分配变量子模板中{%包含%}标签的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> 

子模板:

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

请帮助我,使之与中间模板的工作。 我想这样做,因为我不想多次输入相同的代码。

+12

你是否尝试过用'with'使用'include'? – Besnik 2012-07-24 21:25:22

+0

@Besnik谢谢!!!!有用!!! – Vor 2012-07-24 21:34:37

回答

127

像@Besnik建议,这是很简单的:

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

documentation for include提到了这一点。它还提到您可以使用only仅使用给定变量呈现模板,而不会继承任何其他变量。

谢谢你@Besnik

+3

为了完整性,请注意,如果您只想使用给定变量渲染模板(并且不继承父上下文),则可以添加“仅”选项:{%include“path/to/template.html”with form = form only}} – gonz 2015-04-01 15:07:33

+8

为了完整起见,这里是“with”的链接:https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#include – Timo 2015-04-12 07:36:39

+0

历史记录:https:// code .djangoproject.com/ticket/7817 – Paolo 2015-11-05 17:18:41