Хорошо, я бился головой об это уже 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» не является допустимой функцией просмотра или именем шаблона.
Это почему? Я даже протестировал его и заменил admin на index, и он перенаправляет меня на views.index. Я попытался заменить имя шаблона всем остальным и попытался сопоставить его с путем URL-адреса (как сейчас). Не повезло! Я только что сломал джанго?
@WillemVanOnsem хорошо, я изменил путь и имя на 'veryspecificurl', и я все еще получаю «Обратное совпадение для 'veryspecificurl' не найдено». Как я уже сказал, я пробовал другие варианты, не только админ
вы указали namespace
в вашем urls.py
?
Если мы посмотрим на путь, мы увидим:
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
относится к имени представления.
Вау ... Это то, что вы получите, если пропустите часть документации!
URL-адрес
admin
, здесь'admin
'относится к установленный (коллекция)urls
.