Я следил за документами / видео в Интернете и, похоже, не могу получить свою форму для рендеринга, я был бы рад, если бы кто-нибудь объяснил мне, что я делаю неправильно: моя цель - получить форму для рендеринга
Вот мой код:
views.py
Я обработал оба случая в соответствии с типом запроса и не оставил блок else пустым. Определил форму, не забыл перенаправление
from django.shortcuts import render, redirect
from django.contrib import messages
from .forms import UserRegisterForm
def register(request):
if request.method == 'POST':
form = UserRegisterForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
messages.success(request, f'Account created for {username}!')
return redirect('')
else:
form = UserRegisterForm()
return render(request, 'register.html', {'form': form})
forms.py
Определил форму из существующих форм Django и включил все необходимые поля
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
register.html
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<div class="content-section">
<form method="POST">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Join Today</legend>
{{ form |crispy }}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info" type="submit">Sign Up</button>
</div>
</form>
<div class="border-top pt-3">
<small class="text-muted">
Already Have An Account? <a class="ml-2" href="#">Sign In</a>
</small>
</div>
</div>
{% endblock content %}
base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta http-equiv="X-UA-Compatible" content="ie=edge"/>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<title>Q&A Learning Center {% block title %}{% endblock %}</title>
</head>
<body>
<div></div>
<header>
<!-- NavBar -->
{% include 'partials/_navbar.html' %}
<div class="container">
<div class="row">
<div class="col-md-6 m-auto">
{% block content %}{% endblock %}
</div>
</div>
</div>
</header>
</body>
</html>
URL основного приложения. py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('', include('pages.urls')),
path('admin/', admin.site.urls),
]
страниц \ urls.py
из пути импорта django.urls
из. импорт представлений
urlpatterns = [
path('', views.index, name='index'),
path('about/', views.about, name='about'),
path('register/', views.register, name='register'),
]
страницы \ views.py
def register(request):
return render(request, 'users/register.html')
settings.py
INSTALLED_APPS = [
'users.apps.UsersConfig',
'crispy_forms',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_mysql',
]
CRISPY_TEMPLATE_PACK = 'bootstrap4'
Результат я получаю на сайте
Пробовал на Chrome и Firefox