Django url 模式不是注册的视图函数或模式

Posted

技术标签:

【中文标题】Django url 模式不是注册的视图函数或模式【英文标题】:Django url pattern is not a registered view function or pattern 【发布时间】:2021-10-21 20:10:52 【问题描述】:

我有一个小型 Django Web 应用程序,其中包含多个应用程序。我在 urls.py 文件中使用了包含,但每当我在 html 文件中引用 URLs 时,它们都不会加载。以下是我的 3 urls.py 文件。我遇到的问题具体是节点 urls.py

中的节点 url 模式
#main urls.py

from django.contrib import admin
from django.urls import path, include
    
urlpatterns = [
    path('admin/', admin.site.urls),
    path('account/', include('account.urls')),
]

#account urls.py

from django.urls import path, include
from django.contrib.auth import views as auth_views
from . import views

app_name = 'account'

urlpatterns = [
    path('login/', auth_views.LoginView.as_view(), name='login'),
    path('logout/', auth_views.LogoutView.as_view(), name='logout'),
    path('dashboard/', views.dashboard, name='dashboard'),
    path('nodes/', include('nodes.urls')),
]


#nodes urls.py

from django.urls import path
from . import views

app_name = 'nodes'
urlpatterns = [
    path('', views.nodes, name='nodes'),
]

这是我引用 URL 模式的 HTML 文件:

<li % if section == 'nodes' %class="active"% endif %>
     <a class="nav-link" href="% url 'nodes' %">Nodes</a>
</li>

【问题讨论】:

您可以尝试不使用“”括号。只需使用 Начало 你没有在主 urls 文件中包含你的节点 url @Henty 我该怎么做?我以为是因为帐户 urls.py 包含在主 urls.py 文件中,所以节点 urls.py 文件将被包含? 哦,是的,我错过了,抱歉,我认为它可能类似于 'account.nodes.nodes' 或更短的版本来称呼它 @Henty 我会把这个放在哪里? 【参考方案1】:

由于您在urls file 中设置的此模式名称,如果将 HTML 文件更改为此必须修复:

<li % if section == 'nodes' %class="active"% endif %>
   <a class="nav-link" href="% url 'account:nodes:nodes' %">Nodes</a>
</li>

仅供参考 :) 如果在 django shell 中导入 urls 文件并打印urlspatterns 的列表,您可以看到默认名称分配给您的nodes 路径。

【讨论】:

我是否还必须在 settings.py 中的 LOGIN_URL 属性中进行更改? @Morgan LOGIN_URL 只是使用 login_required() 装饰器时重定向请求以登录的 URL 或命名 URL 模式,此设置变量与您使用的 Django reverse path 无关在 Django 模板标签中,但如果您使用命名 URL,这些名称必须相同。 @Morgan 我的回答没有解决您的问题吗?我在空的 Django 项目中测试了您的代码,并将路径正确地指向节点视图。如果您仍然有错误,请使用错误日志编辑您的问题 是的,谢谢@Erfan,我仍然遇到问题,但后来我发现了一行没有更改的html,现在它已修复。谢谢

以上是关于Django url 模式不是注册的视图函数或模式的主要内容,如果未能解决你的问题,请参考以下文章

python 之 Django框架(路由系统include命名URL和URL反向解析命名空间模式)

Django的URL路由

Django 框架之 URL

NoReverseMatch:未找到“关于”的反向。 'about' 不是有效的视图函数或模式名称

反向找不到'password_reset_confirm'。 'password_reset_confirm'不是有效的视图函数或模式名称

未找到“用户配置文件”的反向。 'userprofile' 不是有效的视图函数或模式名称