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