Django:模板不存在于/accounts/login/

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

账户/模型.py

from django.db import models
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django import forms

# Create your models here.
class UserCreateForm(UserCreationForm):
    email = forms.EmailField(required=True,label='email',error_messages={'exists':'This already exists'})
    firstname = forms.CharField(required=True,label='firstname')
    lastname = forms.CharField(required=True,label='lastname')

    class Meta:
        model = User
        fields = ('firstname','lastname','username','email','password1','password2')
    
    def __init__(self, *args, **kwargs):
        super(UserCreateForm, self).__init__(*args, **kwargs)

        self.fields['firstname'].widget.attrs['placeholder'] = 'First Name'
        self.fields['lastname'].widget.attrs['placeholder'] = 'Last Name'
        self.fields['username'].widget.attrs['placeholder'] = 'Username'
        self.fields['email'].widget.attrs['placeholder'] = 'Email'
        self.fields['password1'].widget.attrs['placeholder'] = 'Password'
        self.fields['password2'].widget.attrs['placeholder'] = 'Confirm Password'

    def save(self, commit=True):
        user = super(UserCreateForm,self).save(commit=False)
        user.email = self.cleaned_data['email']
        if commit:
            user.save()
        return user
    
    def clean_email(self):
        if User.objects.filter(email=self.cleaned_data['email']).exists():
            raise forms.ValidationError(self.fields['email'].error_messages['exists'])
        return self.cleaned_data['email']

帐户/视图.py

from django.shortcuts import render

# Create your views here.
from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User, auth
from accounts.models import UserCreateForm
from django.http import JsonResponse
import random
from django.core.mail import send_mail
from django.conf import settings

def registerpage(request):
    if request.method == 'POST':
        #login
        form = UserCreateForm(request.POST)
        if form.is_valid():
            new_user = form.save()
            new_user = authenticate(
                username = form.cleaned_data['username'],
                password = form.cleaned_data['password1'],
            )
            login(request, new_user)
            return redirect('home')
    else:
        #registration
        form = UserCreateForm() 
    context = {'form':form}
    return render(request, 'store/auth/register.html', context)

账户/urls.py

from django.urls import path,include
from . import views

urlpatterns = [
    path('register', views.registerpage, name='register'),
    path('', include('django.contrib.auth.urls')),
]

父项目根文件夹的urls.py

"""
URL configuration for quality-traders project.

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/5.0/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('store.urls')),
    path('accounts/', include('accounts.urls')),

]

urlpatterns = urlpatterns + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)

注册.html

{% extends "store/layouts/main.html" %}

{% block content %}

<section id="form" style="margin-left: 25%;"><!--form-->
    <div class="container">
        <div class="col-sm-4 col-sm-offset-1 ">

            <div class="signup-form"><!--sign up form-->
                <h2>New User Signup!</h2>
                <form method="post">
                    {% csrf_token %}
                    {% for field in form %}
                    {{ field.errors }}
                    <p>{{field}}</p>
                    {% endfor %}
                    <button type="submit" class="btn btn-default">Signup</button><br>

                    <div class="d-flex justify-content-center links">
                        Already have an account?
                        <a href="{% url 'login' %}">Login</a>
                    </div>
                </form>
            </div><!--/sign up form-->

        </div>
    </div>
</section><!--/form-->

{% endblock content %}

登录.html

{% extends "store/layouts/main.html" %}

{% block content %}

<section id="form " style="margin-left: 25%;"><!--form-->
    <div class="container">
        <div class="col-sm-4 col-sm-offset-1 ">

            <div class="signup-form"><!--sign up form-->
                <h2>User Login!</h2>
                <form method="post">
                    {% csrf_token %}
                    {% for field in form %}
                    {{ field.errors }}
                    <p>{{field}}</p>
                    {% endfor %}
                    <button type="submit" class="btn btn-default">Login</button><br>

                    <div class="d-flex justify-content-center links">
                        Already have an account?
                        <a href="{% url 'login' %}">Sign Up</a>
                    </div>
                </form>
            </div><!--/sign up form-->

        </div>
        </div>
    </div>
</section><!--/form-->

{% endblock content %}

设置.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates')
        ],
        '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',
            ],
        },
    },
]

我通过观看教程创建了这个电子商务网站,https://youtube.com/playlist?list=PLTV1jAY3nKHOqKs4uDaBOdqL3jKK7fjSo&si=h5Hl6NapOuWZvjIa

他用单一视图创建了注册和登录。他创建了仅用于注册的模板网址。登录和注销来自于,

path('accounts/', include('django.contrib.auth.urls')),

他没有使用任何单独的应用程序进行身份验证和授权。但是我愿意。冲突发生了。

我尝试使用实现登录和注销,

path('', include('django.contrib.auth.urls')),

我认为 accounts/ 会自动出现,因为 urls.py 是帐户应用程序的一部分。

但是我得到了, TemplateDoesNotExist at /accounts/login/

如何解决这个问题?

django django-models django-views django-forms django-templates
1个回答
0
投票

问题出在模板目录上。 login.html 位于模板内的 store->auth 文件夹中。

Django 正在模板的 registration 文件夹中搜索它。

所以我创建了一个注册文件夹并向其中添加了登录和注册模板。

谢谢你。

© www.soinside.com 2019 - 2024. All rights reserved.