django - 如何在基本 html 模板 django 中创建一个简单的表单
问题描述
我有一个包含多个页面的 Django 应用程序。像菜单或页脚一样,所有这些页面中都重复了一些元素,所以我创建了一个基本模板并添加了这些重复的代码。现在我想在基本模板的页脚上方有一个表单。但我不知道如何使它工作。我应该创建一个返回 base.html 的视图吗?如何在网站的每个页面上继承此表单?请指导我;我有点酸了!
这是我的 context_processor :
def base_forms(request):
return {
'info_form': BasedContactForm()
}
这是我的 base.html:我在所有其他页面中扩展它:
<form method="post" action="">
{% csrf_token %}
{{ info_form }}
</form>
这是我的博客应用程序视图:
def base_info_form(request):
if request.method == 'POST':
info_form = BaseContactForm(request.POST)
if info_form.is_valid():
info_form.save()
return redirect('Home-Page')
else:
info_form = BaseContactForm()
return render(request, '', {'info_form': info_form})
解决方案
您可以通过设置将一些数据添加到全局上下文TEMPLATES > OPTIONS > context_processors
-编写您自己的上下文处理器。
对于扩展模板,请使用模板标签extends
(Django Docs)。
1. 将变量添加到上下文
创建yourapp/context_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
并将其添加context_processors
到settings.py:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
...
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
...
'yourapp.context_processors.base_data',
],
},
},
]
现在您可以在任何模板中访问您的这些数据:
{{ my_form }}, {{ my_email }}
2.扩展模板
您还可以使用模板标签extends
( Django Docs ) 来扩展您的模板:
template.html
base.html
在 template.html 中,以下路径将是有效的:
{% extends "base.html" %}
<div class="container">
Some HTML code
</div>
附加信息TEMPLATES
(Django Docs)和OPTIONS
(Django Docs)可用参数。
更新
视图.py:
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'))
urls.py:
path('contact/', views.contact, name='contact'),
推荐阅读
- javascript - 错误的 x 轴最小值最大值 Highcharts
- python - 如何使用 matplotlib 中的 mpatches.Patch 将自定义标签添加到条形图中
- google-apps-script - 如何在谷歌应用程序脚本上更改日志消息的语言
- ios - Apple Enterprise 计划,用于为我的客户分发组织的员工应用程序
- json - 使用 curl 时出现 Github API 错误“解析 JSON 的问题”,但与 Postman 一起工作正常
- javascript - 当按下另一个可触摸的不透明度时,一个可触摸的不透明度不会按下
- python - 将值插入同一个列表而不是新的
- python - QSqlTableModel数据编辑(子类化)问题
- fullcalendar - FullCalendar - 在 navLinkDayClick 中获取当前资源
- service-worker - Service Worker 缓存错误的内容