python - Django 2.13 : NoReverseMatch at/basic_app/user_login/

标签 python django

我几乎完成了 Udemy 上的 Web 开发类(class),但在最后一步绊倒了。我真的希望有人能够帮助我,因为这似乎是我正在努力解决的一件非常简单的事情。

问题似乎出在用户单击“登录”链接时触发的 HttpResponseRedirect(reverse('index'))。

非常感谢!

错误在 http://127.0.0.1:8000/basic_app/user_login/ 触发

NoReverseMatch at /basic_app/user_login/
Reverse for 'basic_app/user_login' not found. 'basic_app/user_login' is not a valid view function or pattern name.

Error during template rendering
In template /Users/maxa/Dropbox/workspace/2018/projects/python-django-udemy-bootcamp/myplayground/Django_level_5/learning_users/templates/basic_app/base.html, error at line 6

项目的urls.py:

from django.contrib import admin
from django.conf.urls import url, include
from django.urls import path
from basic_app import views

urlpatterns = [
    url(r'^$',views.index, name='index'),
    path('admin/', admin.site.urls),
    url(r'^basic_app/',include('basic_app.urls')),
    url(r'^logout/$',views.user_logout,name='logout'),
]

应用程序的 urls.py (basic_app/urls.py):

from django.conf.urls import url
from basic_app import views

# TEMPLATE RULES
app_name = 'basic_app'

urlpatterns = [
    url(r'^register/$',views.register,name='register'),
    url(r'^user_login/$',views.user_login,name='user_login'),
]

应用的 views.py (basic_app/views.py):

from django.shortcuts import render
from basic_app.forms import UserForm, UserProfileInfoForm

from django.contrib.auth import authenticate, login, logout
from django.http import HttpResponseRedirect, HttpResponse
from django.urls import reverse
from django.contrib.auth.decorators import login_required

# Create your views here.

def index(request):
    return render(request,'basic_app/index.html')

def register(request):
    registered = False

    if request.method == "POST":
        user_form = UserForm(data=request.POST)
        profile_form = UserProfileInfoForm(data=request.POST)

        if user_form.is_valid() and profile_form.is_valid():

            user = user_form.save()
            user.set_password(user.password)
            user.save()

            profile = profile_form.save(commit=False)
            profile.user = user

            if 'profile_pic' in request.FILES:
                profile.profile_pic = request.FILES['profile_pic']

            profile.save()

            registered = True

        else:
            print(user_form.errors,profile_form.errors)

    else:
        user_form = UserForm()
        profile_form = UserProfileInfoForm()

    return render(request,'basic_app/registration.html',{'user_form':user_form,'profile_form':profile_form,'registered':registered})

def user_login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')

        user = authenticate(username=username,password=password)

        if user:
            if user.is_active:
                login(request, user)
                return HttpResponseRedirect(reverse('index'))
            else:
                return HttpResponse("Your account is not active.")
        else:
            print("Someone tried to log in and failed")
            print("Username: {}. Password: {}".format(username,password))
            return HttpResponse("invalid login details supplied!")

    else:
        return render(request,'basic_app/login.html',{})

@login_required
def user_logout(request):
    logout(request)
    return HttpResponseRedirect(reverse('index'))

应用程序的 base.html (templates/basic_app/base.html):

<!DOCTYPE html>
<html>
<head>
    <title></title>

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">

</head>
<body> <nav class="navbar navbar-expand-lg navbar-light bg-light">
    <div class="container"><ul class="nav navbar-nav">
        <li><a href="{% url 'index' %}" class="navbar-brand" class="nav-link">Home</a></li> <li class="nav-item"><a href="{% url 'admin:index' %}" class="nav-link">Admin</a></li>
<li class="nav-item"><a href="{% url 'basic_app:register' %}" class="nav-link">Register</a></li>

{% if user.is_authenticated %}

<li><a href="{% url 'logout' %}" class="nav-link">Log Out</li>

{% else %}

<li><a href="{% url 'basic_app:user_login' %}" class="nav-link">Log In</a></li>

{% endif %}


    </ul></div>
</nav>

<div class="container">

{% block body_block %}
{% endblock %}

</div>

</body>
</html>

应用程序的 login.html (templates/basic_app/login.html):

{% extends 'basic_app/base.html' %}

{% block body_block %}

<div class="jumbotron">

    <h1>Please login</h1>
    <form action="{% url 'basic_app/user_login' %}" method="post">
        {% csrf_token %}
        <label for="username">Username:</label>
        <input type="text" name="username" value="" placeholder="Enter Username">

        <label for="password">Password:</label>
        <input type="password" name="password">

        <input type="submit" name="" value="Login">
    </form>


</div>

{% endblock %}

非常感谢!

最佳答案

您在 templates/basic_app/login.html 表单的 action 属性中有错字。将 basic_app/user_login 更改为 basic_app:user_login

<form action="{% url 'basic_app:user_login' %}" method="post">

关于python - Django 2.13 : NoReverseMatch at/basic_app/user_login/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53717825/

相关文章:

python - django:值的日期格式无效。它必须是 YYYY-MM-DD 格式

mysql - Django MySQL 连接中的 SSL 错误(2026 SSL_CTX_set_tmp_dh 失败)

python - 为什么 django Unittest 在比较 numpy.float64 的两个实例时会抛出断言错误?

django - 运行 django 测试时如何修复 "TypeError: argument of type ' ConnectionHandler' is not iterable”?

python - itertools.islice 不是生成器?

python - 查找数字数据帧的数字根

python - python自动添加空格

python - 用阶跃函数求解微分方程

python - KMeans "No handles with labels found to put in legend"的 3D 散点图图例错误

Django休息框架: Updating model with ImageField without updating the image