如何一起使用Django模板上下文处理器和表单?

时间:2017-09-29 20:57:51

标签: django django-forms django-templates django-views

我是Django的新手。在一个项目中,我必须使用表单在Django中为多个模型输入输入。 我为每个模型编写了函数(在views.py中)及其相应的Django模板(在模板文件夹中)。 比如,我的添加教师功能是,

def add_teacher(request):
    form = TeacherForm()

    if request.method=="POST":
        form = TeacherForm(request.POST)

        if form.is_valid():
            form.save(commit=True)

            return index(request)
        else:
            print(form.errors)

    return  render(request,"billing/add_teacher.html",{"form":form})

结算/ add_teacher.html模板是,

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Add Teacher</title>
</head>
<body>
    <h1>Add a Discipline</h1>
    <div>
        <form id="teacher_form" method="post" action="/billing/add_teacher/">
            {% csrf_token %}
            {% for hidden in form.hidden_fields %}
            {{ hidden }}
            {% endfor %}

            {% for field in form.visible_fields %}
            {{ field.errors }}
            {{ field.help_text }}
            {{ field }}
            {% endfor %}
        <input type="submit" name="submit" value="Add Teacher"/>
        </form>
    </div>
</body>
</html>

现在,我想为我的所有函数使用一个模板。例如,我希望在Django模板上下文处理器的帮助下将此模板用于所有函数。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{ title }}</title>
</head>
<body>
    <h1>{{ h1 }}</h1>
    <div>
        <form id={{ form_id }} method="post" action="{{ action }}">
            {% csrf_token %}
            {% for hidden in form.hidden_fields %}
            {{ hidden }}
            {% endfor %}

            {% for field in form.visible_fields %}
            {{ field.errors }}
            {{ field.help_text }}
            {{ field }}
            {% endfor %}
        <input type="submit" name="submit" value={{ value }}/>
        </form>
    </div>
</body>
</html>

但是当我返回render()函数时,我只能设置上下文或表单。例如,我可以使用其中一个,

return  render(request,"billing/add_teacher.html",{"form":form})

,或者

return  render(request,"billing/add_teacher.html",context= context_dict)

我如何一起使用这两个? 像,

return  render(request,"billing/add_teacher.html",{"form":form},context =context_dict)

谢谢。

1 个答案:

答案 0 :(得分:1)

尝试以下

context_dict.update({"form":form})
return  render(request, "billing/add_teacher.html", context=context_dict)