我是 Django 新手,我想在主页(index.html)上显示
register.html
注册表单,而不是在 http://127.0.0.1:8000/register
或类似页面上。在主页上我想看到各种输入文本框。我究竟做错了什么?我该如何解决?在index.html页面中,我没有使用任何东西来调用表单(register.html)。也许我做错了?
App1/templates/registrazione/register.html
{% extends "index.html" %}
{% block content %}
<!--Register-->
<div class="container py-5">
<h1>Register</h1>
<form method="POST">
{% csrf_token %}
{{ register_form.as_p }}
<button class="btn btn-primary" type="submit">Register</button>
</form>
<p class="text-center">If you already have an account, <a href="/login">login</a> instead.</p>
</div>
{% endblock %}
App1/forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
# Create your forms here.
class NewUserForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ("username", "email", "password1", "password2")
def save(self, commit=True):
user = super(NewUserForm, self).save(commit=False)
user.email = self.cleaned_data['email']
if commit:
user.save()
return user
App1/urls.py
from django.urls import path
from . import views
urlpatterns=[
path('', views.index, name='index'),
App1/views.py
from .forms import NewUserForm
from django.contrib import messages
from django.contrib.auth.decorators import login_required
def index(request):
"""View function for home page of site."""
return render(request, 'index.html')
def register_request(request):
if request.method == "POST":
form = NewUserForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user)
messages.success(request, "Registration successful." )
return redirect("index.html")
messages.error(request, "Unsuccessful registration. Invalid information.")
form = NewUserForm()
return render (request=request, template_name="registation/register.html", context={"register_form":form})
我的网站(项目)
urls.py
from django.contrib import admin
from django.urls import path, include
from django.contrib.auth import views as auth_views
from django.contrib.auth.views import LoginView
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('App1.urls')),
path("login/", LoginView.as_view(), name="login"),
查看函数末尾的 App1/views.py。 它应该返回
return render(request, "registrazione/register.html",{"register_form":form})
问题是目录名称与您提到的不匹配 在模板目录中 模板/registrazione/register.html 所以 templates 是应该在 settings.py 中配置的基本目录
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ["templates"], # here the templates should be mention
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
并且在每个views.py文件中返回从templates/
的子目录开始的.html文件所以它应该位于上面提到的views.py 文件中。但最好将 registrazione 从模板重命名为 registration 和来自views.py文件
return render(request, "registration/register.html",{"register_form":form})