【问题标题】:"Reverse for ... not found" - but there is?“反向为......未找到” - 但有吗?
【发布时间】:2019-04-01 18:03:52
【问题描述】:

好的,我已经为此苦苦挣扎了 30 多分钟,所以这里我处于堆栈溢出状态。

我有一个模板:

{% if user.is_authenticated %}
<a href="{% url 'admin' %}">                                
   Admin
</a>  
{% endif %}  

在 urls.py 中:

urlpatterns = [
  path('admin', admin.site.urls, name = 'admin'),  
  path('', views.index, name ='index'), 
]

但我仍然得到: NoReverseMatch 在 /

找不到“管理员”的反向。 'admin' 不是有效的视图函数或模式名称。

这是为什么呢?我什至对其进行了测试,并将 admin 替换为 index,它会将我重定向到 views.index。我尝试用其他所有内容替换模式的名称,并尝试将其与 url 路径匹配(就像现在一样)。没有运气!我刚刚破坏了 django 吗?

【问题讨论】:

  • admin url,'admin'这里指的是urls集合(集合)。
  • @WillemVanOnsem 好的,我将路径和名称更改为 'veryspecificurl',但仍然得到“找不到 'veryspecificurl' 的反向匹配”。正如我所说,我尝试了其他选项,而不仅仅是管理员
  • 您是否在urls.py 中指定了namespace

标签: django django-templates django-urls


【解决方案1】:

如果我们看一下路径,我们会看到:

path('admin', <b>admin.site.urls</b>, name='admin'),

这意味着admin 不是路径,它是路径的集合。在admin.site.urls 后面有一组路径和对应的视图。所以不能引用一组 URL,只能引用一个路径。

现在admin.site.urls下,我们看到几个视图:

>>> admin.site.urls
([<URLPattern '' [name='index']>,
  <URLPattern 'login/' [name='login']>,
  <URLPattern 'logout/' [name='logout']>,
  <URLPattern 'password_change/' [name='password_change']>,
  <URLPattern 'password_change/done/' [name='password_change_done']>,
  <URLPattern 'jsi18n/' [name='jsi18n']>,
  <URLPattern 'r/<int:content_type_id>/<path:object_id>/' [name='view_on_site']>,
  <URLResolver <URLPattern list> (None:None) 'auth/group/'>,
  <URLResolver <URLPattern list> (None:None) 'auth/user/'>,
  <URLPattern '^(?P<app_label>auth)/$' [name='app_list']>],
 'admin',
 'admin')

所以我们可以参考映射到管理站点(第一个)的“根”的管理 URL,其中:

{% if user.is_authenticated %}
<a href="{% url 'admin:index' %}">
   Admin
</a>
{% endif %}

这里的admin:部分来源于管理员“app”的namespace:index部分指的是视图的名称。

【讨论】:

  • 哇...这就是您跳过部分文档时得到的结果!
猜你喜欢
  • 2020-09-09
  • 2014-01-08
  • 2019-04-09
  • 2019-10-19
  • 2018-06-28
  • 1970-01-01
  • 2019-08-03
  • 2021-11-09
  • 2019-04-14
相关资源
最近更新 更多