html - 将 HTML 表单移至 Django 2.1
问题描述
我有许多预先编写好的网站表格。我需要保持这些原样而不是修改它们。
我还需要将这些移动到 Django 2.1 后端,该后端似乎有一个内置的表单生成系统,它似乎与表单本身不兼容(IE The Jinja Scripting for forms 似乎自动生成没有任何实际选择的形式)。
我找不到任何关于如何将现有表单移动到 Django 的文档,我也不知道如何。
谢谢你帮助我。
<div class="container">
<form class="form-signin" name="login" action="timesheet">
<h1 class="h3 mb-3 font-weight-normal">Sign In</h1>
<label for="inputEmail" class="sr-only">Email address</label>
<input type="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus>
<label for="inputPassword" class="sr-only">Password</label>
<input type="password" id="inputPassword" class="form-control" placeholder="Password" required>
<div class="checkbox mb-3">
<label>
<input type="checkbox" value="remember-me"> Remember me
</label>
</div>
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</form>
</div>
解决方案
你是对的 Django 有自己的处理表单的方式,但幸运的是它是完全可定制的。假设您有一个要显示给用户的 LoginForm:
您必须在 Django 中创建一个代表该字段的表单。此外,如果凭据正确,表单将在您的 django 系统中对用户进行身份验证,您将使此表单继承自 Django 内置的 AuthentificationForm: forms.py:
from django.contrib.auth.forms import AuthenticationForm
class EmailAuthenticationForm(AuthenticationForm):
required_css_class = 'required'
remember_me = forms.BooleanField(
required=False,
label='Remember me for two weeks',
)
def clean_username(self):
"""Prevent case-sensitive erros in email/username."""
return self.cleaned_data['username'].lower()
接下来我们必须将表单提供给用户(通过 html)。因此,我们创建了一个视图,在您的应用程序的 views.py 中呈现表单: views.py:
from forms import EmailAuthentificationForm
def login(request):
if request.method == 'POST':
form = EmailAuthenticationForm(request.POST)
if form.is_valid():
pass # does nothing, just trigger the validation
else:
form = EmailAuthenticationForm()
return render(request, 'login.html', {'form': form})
现在为了让我们的生活更轻松,django 可以自动为您呈现表单,而无需任何样式,只是为了让事情正常工作。但是由于我们有自己的 html 布局和我们自己的样式,我们想要做的是手动渲染表单: login.html
<div class="container">
<form method="post" class="form-signin" name="login" action="timesheet" novalidate>
{% csrf_token %}
{{ form.non_field_errors }}
{{ form.source.errors }}
{{ form.source }}
<h1 class="h3 mb-3 font-weight-normal">Sign In</h1>
<label for="inputEmail" class="sr-only">Email address</label>
{{form.email}}
<label for="inputPassword" class="sr-only">Password</label>
{{form.password}}
<div class="checkbox mb-3">
<label>
{{form.remember_me}}
</label>
</div>
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</form>
现在电子邮件和密码字段仍然不会使用您希望字段具有的所有 css 属性来呈现,您需要在身份验证表单中的电子邮件和密码字段中添加其他属性。要了解如何做到这一点,请在此处 阅读更多内容要了解有关在 django 中呈现您自己的自定义表单的更多信息,请阅读此处
推荐阅读
- api - 共享同一包的 API 中的反射
- windows - 每五帧添加关键帧?自动热键?
- perl - 为什么在 perl 中将 csv 转换为 xlsx 时文件大小会发生变化
- c# - C# 尽可能高效地从字符串中删除回车符、换行符和空格(基准)
- masstransit - DelegateEndpointDefinition IsTemporary
- javascript - Snackbar 未在页面中呈现
- reactjs - Material-Table里面的开关打不开
- ant - Jacoco 覆盖在 java 类中为 org/apache/log4j/Category 提供错误
- java - JPA 与共享主键的单向@OneToOne 关系始终触发辅助查询,即使 fetchType 为 EAGER
- flutter - 如何使用 bloc flutter 更改单个列表项的状态?