首页 > 解决方案 > /users/login/ 处的 NoReverseMatch

问题描述

“learning.logs”不是注册的命名空间。请求方法:GET 请求 URL: http://localhost:8000/users/login/ Django 版本:2.2.7 异常类型:NoReverseMatch 异常值:'learning.logs' 不是注册的命名空间

设置.py

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# my_apps
'learning_logs',
'users',
]

learning_log\urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('users/',include('users.urls', namespace='users')),
    path('',include('learning_logs.urls', namespace='learning_logs')),
]

用户\urls.py

from django.urls import re_path, path, include
from django.contrib.auth.views import LoginView
from . import views

app_name = 'users'

urlpatterns = [
    # log in page
    path('login/', LoginView.as_view(template_name='users/login.html'),name='login'),

]

learning_logs\urls.py

from django.urls import re_path
from . import views

app_name = 'learning_logs'

urlpatterns = [
# homepage
re_path('^$', views.index, name='index'),

# show all topics
re_path('^topics/$', views.topics, name='topics'),

# show dedicated topic
re_path('^topics/(?P<topic_id>\d+)/$', views.topic, name='topic'),

# added new topic
re_path('^new_topic/$', views.new_topic, name='new_topic'),

# added new entry
re_path('^new_entry/(?P<topic_id>\d+)/$', views.new_entry, name='new_entry'),

# edit entry
re_path('^edit_entry/(?P<entry_id>\d+)/$', views.edit_entry, name='edit_entry'),
]

登录.html

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

{% block content %}

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

  <form method="post" action="{% url 'users:login' %}">
  {% csrf_token %}
  {{ form.as_p }}

  <button name="submit">log in</button>
  <input type="hidden" name="next" value="{% url 'learning.logs:index' %}" />
  </form>

{% endblock content %}

base.html

<p>
  <a href="{% url 'learning_logs:index' %}">Learning Log</a> -
  <a href="{% url 'learning_logs:topics' %}">Topics</a> -
  {% if user.is_authenticated %}
    Hello, {{ user.username }}.
  {% else %}
    <a href="{% url 'users:login' %}">log in</a>
  {% endif %}
</p>

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

标签: pythondjango

解决方案


在您的模板login.html中,您通过名称 learning.logs:index 引用 url,但您创建的命名空间是 learning_logs。

<input type="hidden" name="next" value="{% url 'learning.logs:index' %}" />

只需修复模板中的错字就可以了。


推荐阅读