错误:未找到'login'。'login'不是一个有效的视图函数或模式名称。

5
这是我第一次使用Django登录模板,遇到了一个问题。它一直提示login不是有效的视图函数,但我在我的用户应用程序的urls.py中定义了它:
enter image description here
enter image description here
不确定我做错了什么。
主urls.py
urlpatterns = [
    path('', include('blogging_logs.urls', namespace='blogging_logs')),
    path('users/', include('users.urls', namespace='users')),
    path('admin/', admin.site.urls),
]

应用程序:blogging_logs:base.html

<p>
  <a href="{% url 'blogging_logs:index' %}">Home</a>
  <a href="{% url 'blogging_logs:categories' %}">Categories</a>
  {% if user.is_authenticated %}
    Hello, {{ user.username }}.
    {% else %}
      <a href="{% url 'users:login' %}"> login in</a>
  {% endif %}
</p>

{% block content %}{% endblock content %}

应用程序: 用户: urls.py

from django.contrib import admin
from django.urls import re_path, path
from django.contrib.auth import authenticate, login
from django.contrib.auth import views as auth_views

app_name = 'users'

urlpatterns = [
    # Login Page
    path('login/', auth_views.LoginView.as_view(template_name='login.html')),
]

应用程序:用户:登录页面

{% extends "blogging_logs/base.html" %}

{% block content %}
  {% if form.errors %}
    <p>Your username and password din't match. Please try again.</p>
  {% endif %}

  <form class="" method="post" action="{% url 'users:login' %}" >
    {% csrf_token %}
    {{ form.as_p }}
    <button name='submit'> Login in </button>
    <input type="hidden" name="next" value="{% url 'blogging_logs:index' %}" />
  </form>
{% endblock content %}
1个回答

5
您缺少path函数的name参数:

请更改以下行:

path('login/', auth_views.LoginView.as_view(template_name='login.html')),

to

path('login/', auth_views.LoginView.as_view(template_name='login.html'), name='login'),

似乎这样做就可以了。为什么是名称而不是命名空间?只是好奇。感谢您的帮助! - Nick
@Nick 只有使用 include() 的时候才需要使用 namespace,因为这可以是多个路由共享的命名空间。单个路由只有一个 name。在命名空间内部的路由通过 namespace:name 引用。 - trixn
@Nick,你的命名空间是 user - Selcuk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接