【发布时间】:2019-11-14 09:50:31
【问题描述】:
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']
users/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 %}
【问题讨论】:
-
我不确定您为什么复制了模板。你想达到什么目的?在任何情况下,登录视图都不会将注册表单发送到模板。
-
感谢您的回复。我想我对如何将
UserRegistrationForm()发送到login.html模板感到困惑。我已将“register.html”模板复制到login.html模板中作为起点(因为它适用于register.html模板)。我想我需要为login.html模板创建一个单独的表单,将def login()函数添加到views.py,然后将该表单传递给login.html?我很困惑,因为我一直在关注 Corey Schafer 的视频 here 而他没有做任何事情? -
但它在 register.html 模板中工作,因为它是由注册视图呈现的。 login.html 模板由 LoginView 呈现,您无法控制它,因为您从 django.contrib.auth 导入它。我不确定你为什么要这样做,login.html 是用来显示登录表单的。
-
您的回复在我编辑上述回复之前就已收到。请看上面。谢谢。
-
不,如果您只想显示登录表单,则无需执行任何操作;您只需在模板中使用
form而不是registration_form,因为这是 LoginView 发送的内容。
标签: python django django-crispy-forms