在Django中我在主页上看不到用户注册表

问题描述 投票:0回答:1

我是 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"),
python python-3.x django django-forms
1个回答
0
投票

查看函数末尾的 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})
© www.soinside.com 2019 - 2024. All rights reserved.