“反向...未找到”-但是有吗?

时间:2018-10-28 18:28:45

标签: django django-templates django-urls

好吧,我已经为此努力了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替换了admin,并将其重定向到views.index。我尝试用其他所有内容替换模式的名称,并尝试将其与url路径进行匹配(就像现在一样)。没运气!我刚刚打破了django吗?

1 个答案:

答案 0 :(得分:1)

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

path('admin', admin.site.urls, 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:部分源自管理员“应用”的namespace,而:index部分引用视图的名称。