如何在基本html模板django中创建简单表单

如何在基本html模板django中创建简单表单,django,django-views,django-forms,Django,Django Views,Django Forms,我有一个Django应用程序,它包含多个页面。像菜单或页脚一样,一些元素在所有这些页面中都是重复的,所以我创建了一个基本模板并添加了这些重复的代码。 现在我想在基础模板的页脚上方有一个表单。但我不知道如何让它工作。 我应该创建一个返回base.html的视图吗?如何在网站的每个页面上继承此表单? 请引导我;我有点麻烦了 这是我的上下文处理器: def base_forms(request): return { 'info_form': BasedContac

我有一个Django应用程序,它包含多个页面。像菜单或页脚一样,一些元素在所有这些页面中都是重复的,所以我创建了一个基本模板并添加了这些重复的代码。 现在我想在基础模板的页脚上方有一个表单。但我不知道如何让它工作。 我应该创建一个返回base.html的视图吗?如何在网站的每个页面上继承此表单? 请引导我;我有点麻烦了

这是我的上下文处理器:

def base_forms(request):
    return {       
        'info_form': BasedContactForm()
    }
这是my base.html:我在所有其他页面中扩展它:

<form method="post" action="">
      {% csrf_token %}
      {{ info_form }}
   </form>

您可以通过设置
TEMPLATES>OPTIONS>context\u处理器向全局上下文添加一些数据

对于扩展模板,请使用模板标记()

1。向上下文添加变量


创建你的应用程序/context\u processors.py:

from django.conf import settings

from yourapp.forms import MyForm


def base_data(request):
    data = {}
    # MyForm(request.GET, user=request.user)
    data["my_form"] = MyForm()
    data["my_email"] = settings.MYEMAIL
    return data
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
           ...
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                ...
                'yourapp.context_processors.base_data',
            ],
        },
    },
]
def contact(request):
    if request.method == 'POST':
        form = BaseContactForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('Home-Page')
    else:
        form = BaseContactForm()
    return redirect(request.META.get('HTTP_REFERER'))
path('contact/', views.contact, name='contact'),
并将其添加到settings.py中的
context\u处理器中:

from django.conf import settings

from yourapp.forms import MyForm


def base_data(request):
    data = {}
    # MyForm(request.GET, user=request.user)
    data["my_form"] = MyForm()
    data["my_email"] = settings.MYEMAIL
    return data
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
           ...
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                ...
                'yourapp.context_processors.base_data',
            ],
        },
    },
]
def contact(request):
    if request.method == 'POST':
        form = BaseContactForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('Home-Page')
    else:
        form = BaseContactForm()
    return redirect(request.META.get('HTTP_REFERER'))
path('contact/', views.contact, name='contact'),
现在,您可以在任何模板中访问此数据:

{{ my_form }}, {{ my_email }}
2。扩展模板


还可以使用模板标记()扩展模板:

template.html
base.html
在template.html中,以下路径将有效:

{% extends "base.html" %}
<div class="container">
    Some HTML code
</div>
url.py

from django.conf import settings

from yourapp.forms import MyForm


def base_data(request):
    data = {}
    # MyForm(request.GET, user=request.user)
    data["my_form"] = MyForm()
    data["my_email"] = settings.MYEMAIL
    return data
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
           ...
        ],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                ...
                'yourapp.context_processors.base_data',
            ],
        },
    },
]
def contact(request):
    if request.method == 'POST':
        form = BaseContactForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('Home-Page')
    else:
        form = BaseContactForm()
    return redirect(request.META.get('HTTP_REFERER'))
path('contact/', views.contact, name='contact'),

如果表单确实出现在每个页面上,您可以在上下文处理器中添加表单,您能解释更多吗?我该如何使用它?@Sam,你也可以使用模板标签。我更新了我的答案。我如何保存我的表格?@Sam,你能分享你的表格代码吗?@Sam,你必须创建一个视图来处理你的表格。我更新了问题。检查一下out@Sam,您必须在views.py中处理
BaseContactForm
。上下文处理器仅用于添加全局数据。