使用Context_processors导入表单

时间:2016-01-19 17:40:28

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

我想设置一个变量,其中包含我可以在我的页脚中使用的表单,该表单位于base.html中。我正在考虑使用context_processor来创建一个变量,但是在我需要帮助几个小时后我必须遗漏一些东西。

views.py

from django.shortcuts import render

# Create your views here.
from .forms import SignUpForm
from .models import SignUp

def SignUp(request):
    form = SignUpForm(request.POST or None)
    context = {
        "form": form
    }
    return render(request, "", context)

context_processor.py

from .forms import SignUp

def SignUpFormGlobal(request):
    newsletter = SignUp()
    return {
        'signup': newsletter 
    }

base.html文件

<form method='POST' action=''>
    {% csrf_token %}
    {{ signup }}
    <input class='btn btn-default' type='submit' value='Submit' />
</form>

1 个答案:

答案 0 :(得分:1)

在模板中signup是一个函数需要一个请求参数(一个django视图函数)。看起来你想要做的是改为使你的signup变量成为Django形式。

# context_processor.py
def SignUpFormGlobal(request):
    return {
        'signup_form': SignUpForm()
    }

在模板中,表单应该正确显示

<form action="{% url 'sign-up-view' %}" method="POST">
    {% csrf_token %}
    {{ signup_form.as_p }}
    <input class="btn btn-default" type="submit" value="Submit">
</form>

您还需要更新TEMPLATE设置以确保正在使用context_processor。

TEMPLATES = [{
    ....
    'OPTIONS': {
        'context_processors': [
            'myproject.context_processors.SignUpFormGlobal',
            ....
        ],
    },
}]