使用 Context_processors 导入表单

Importing Form using Context_processors

我想设置一个包含表单的变量,我可以在 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>

在您的模板中 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',
            ....
        ],
    },
}]