python - Django 不会在多个模板中呈现表单?
问题描述
Django的新手。酥脆的表格在注册页面上呈现精美。精确复制和粘贴不会在登录页面上呈现表单?非常感谢所有帮助。
我也试过从等式中删除 Crispy,但没有运气。
main_project/urls.py
from django.contrib import admin
from django.contrib.auth import views as auth_views
from django.urls import path, include
from users import views as user_views
from website import views as website_views
urlpatterns = [
path('admin/', admin.site.urls),
path('register/', user_views.register, name='register'),
path('home/', website_views.home, name='site-home'),
path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
path('logout/', auth_views.LogoutView.as_view(template_name='users/logout.html'), name='logout')
]
用户/forms.py
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class UserRegisterForm(UserCreationForm):
first_name = forms.CharField(max_length=100)
last_name = forms.CharField(max_length=100)
email = forms.EmailField()
address = forms.CharField(max_length=100)
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
用户/views.py
from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import UserRegisterForm
# Create your views here.
def register(request):
if request.method == 'POST':
register_form = UserRegisterForm(request.POST)
if register_form.is_valid():
register_form.save()
username = register_form.cleaned_data.get('username')
email = register_form.cleaned_data.get('email')
messages.success(request, f'Account created for {username}')
return redirect('website-home')
else:
register_form = UserRegisterForm()
return render(request, 'users/register.html', {'register_form':register_form})
users/register.html 和 users/login.html
{% extends 'base.html' %}
{% load crispy_forms_tags %}
<!-- Extra Styling? -->
{% block extrahead %}
{% endblock extrahead %}
<!-- Include Navbar? -->
{% block navbar %}
{% include 'navbar.html' %}
{% endblock navbar %}
<!-- Main HTML Page Cotent -->
{% block content %}
<div class="container">
<form>
<fieldset>
<div class="row justify-content-center">
<div class="col-6">
{% csrf_token %}
<legend>
{{register_form|crispy}}
</legend>
</div>
</div>
</fieldset>
<div class='row justify-content-center'>
<div class="col-6">
<button type="submit" class="btn btn-success float-right">Register</button>
</div>
</div>
</form>
</div>
{% endblock content %}
解决方案
@Daniel Roseman 完美解决了这个问题,请参阅评论。
基本上,上面的内容有点混乱。Django 类ListView()
已经向您选择的模板返回了一个表单(这就是重点)。使用form
而不是register_form
表单标签使一切工作完美。请参阅下面的更正代码。
users/login.html
{% extends 'base.html' %}
{% load crispy_forms_tags %}
<!-- Extra Styling? -->
{% block extrahead %}
{% endblock extrahead %}
<!-- Include Navbar? -->
{% block navbar %}
{% include 'navbar.html' %}
{% endblock navbar %}
<!-- Main HTML Page Cotent -->
{% block content %}
<div class="container">
<form>
<fieldset>
<div class="row justify-content-center">
<div class="col-6">
{% csrf_token %}
<legend>
{{form|crispy}}
</legend>
</div>
</div>
</fieldset>
<div class='row justify-content-center'>
<div class="col-6">
<button type="submit" class="btn btn-success float-right">Register</button>
</div>
</div>
</form>
</div>
{% endblock content %}
推荐阅读
- rxjs - 使用 RxJS 的工作流运行器
- javascript - Google Apps 脚本 - 将函数输出分配给变量并执行 document.write
- coinbase-api - 使用coinbase api将xlm从coinbase发送到恒星地址
- security - 我已在应用程序中订阅了一项服务,但我无法使用相同的凭据登录到我的其他设备
- azure - 如何为具有相同标签集的不同文档布局训练自定义模型?
- r - 为什么我会收到警告“在 edit.data.frame(x) 中:在 'name' 中添加了因子级别”使用 edit(x)
- java - 数组错误在给定条件下有多少奇数和偶数
- python - 如何将数组([1,1,1])与数组([2,3,4])相乘以获得数组[[2,3,4],[2,3,4],[2,3,4] ]]?
- csv - backtrader 如何使用分析器访问数据?
- .net-core - 如何验证使用密钥提交的凭据以在 .net 核心中使用 google 登录?