Django 2.0'name'不是注册的命名空间

时间:2017-12-26 20:38:17

标签: python html django

我已经多次看到这个错误,但我找不到任何人使用Django 2.0并遇到问题。

当我尝试将一个应用程序嵌套在另一个应用程序中时,问题就出现了。嵌套的应用程序(称为“用户”)旨在允许用户登录和退出。放入该段后,我收到以下错误:

if (Button.value =="Weekend")
{
Do something
}
else
{
Do antoher thing
}

这是我的根urls.py

Template error:
In template C:\Users\arbit\Documents\python\learning_log\learning_logs\templates\learning_logs\base.html, error at line 6
   'users' is not a registered namespace
   1 : <p>
   2 :     <a href="{% url 'learning_logs:index' %}">Learning Log</a> 
   3 :     <a href="{% url 'learning_logs:topics' %}">Topics</a> 
   4 :     {% if user.is_authenticated %}
   5 :         Hello, {{ user.username }}.
   6 :         <a href=" {% url 'users:logout' %} ">log out</a>
   7 :     {% else %}
   8 :         <a href="{% url 'users:login' %}">log in</a>
   9 :     {% endif %}
   10 : </p>
   11 : 
   12 : {% block content %}{% endblock content %}
   13 : 

...和应用“users”url.py

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

from . import views

app_name = "learning_log"

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

urlpatterns = [
    # Home page
    path('', views.index, name='index'),

    # Show all topics
    path('topics/', views.topics, name='topics'),

    # Detail page for a single topic
    path('topics/<int:topic_id>/', views.topic, name='topic'),

    # Page for adding a new topic
    path('new_topic/', views.new_topic, name='new_topic'),

    # Page for adding a new entry
    path('new_entry/<int:topic_id>/', views.new_entry, name='new_entry'),

    # Page for editing an entry
    path('edit_entry/<int:entry_id>/', views.edit_entry, name='edit_entry'),
]

和“用户”应用中的base.html

from django.urls import path
from django.contrib.auth.views import login

from . import views

app_name = 'users'

urlpatterns = [
    # Login page.
    path('login/', login, {'template_name': 'users/login.html'}, name='login'),

    # Logout page
    path('logout/', views.logout_view, name='logout'),
]

我当然使用较旧的教程,因此我确定问题与Django 2.0中的内容有关,但与本书所涵盖的旧版本无关。非常感谢您的帮助。

6 个答案:

答案 0 :(得分:11)

有两种方法可以解决这个问题。

首先,您可以在包含的URLconf模块中设置app_name属性,与urlpatterns属性处于同一级别。您必须将实际模块或对模块的字符串引用传递给include(),而不是urlpatterns本身的列表。

https://docs.djangoproject.com/en/2.0/topics/http/urls/#url-namespaces-and-included-urlconfs

urls.py

from django.urls import include, path

urlpatterns = [
    path('polls/', include('polls.urls')),
]

轮询/ urls.py

from django.urls import path

from . import views

app_name = 'polls'
urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
    path('<int:pk>/', views.DetailView.as_view(), name='detail'),
    ...
]

玩得开心!

答案 1 :(得分:0)

users设置为namespace方法的include关键字参数的值,以设置相应的应用程序命名空间:

path('users/', include('users.urls', namespace='users'))

答案 2 :(得分:0)

您需要实际告诉它名称空间是什么。

更改此行:

path('users/', include('users.urls')),

为:

path('users/', include('users.urls', namespace="users")),

Read the documentation

答案 3 :(得分:0)

因为“learning_logs”URL命名空间包含“users”,所以它们被认为是嵌套的。因此,当您想在“用户”中找到网址时,您需要在url代码中使用这两个名称:

<a href="{% url 'learning_logs:users:logout' %}">log out</a>

答案 4 :(得分:0)

尝试更改app_name=''(如果没有,则创建)

在第一个learning_logs应用中,您最后忘记了s(例如app_name = 'learning_logs'

答案 5 :(得分:0)

我遇到了同样的问题,但设法解决了这个问题,确保项目urls.py有一个管理应用的视图路径,在本例中为users