Django 2.0 - Недействительная функция просмотра или имя шаблона (пользовательская настройка представлений Auth)
Я работаю над упражнением на курс, и я застрял на несколько часов, и я не уверен, что приводит к разрыву приложения, затем вы найдете соответствующие файлы и, возможно, сможете найти решение. Спасибо за вашу помощь!
Структура проекта
Эта ошибка выдается при входе в систему:
Internal Server Error: /account/login/
...
django.urls.exceptions.NoReverseMatch: Reverse for 'dashboard' not found. 'dashboard' is not a valid view function or pattern name.
[04/Apr/2018 17:12:15] "POST /account/login/ HTTP/1.1" 500 151978
В конце файла settings.py
from django.urls import reverse_lazy
LOGIN_REDIRECT_URL = reverse_lazy('dashboard')
LOGIN_URL = reverse_lazy('login')
LOGOUT_REDIRECT_URL = reverse_lazy('logout')
Файл urls.py
from django.contrib.auth import views as auth_views
from django.urls import path
from . import views
app_name = 'account'
urlpatterns = [
# path('login/', views.user_login, name='login'),
path('', views.dashboard, name='dashboard'),
# login / logout urls
path('login/', auth_views.LoginView.as_view(template_name='registration/login.html'), name='login'),
path('logout/', auth_views.LogoutView.as_view(template_name='registration/logged_out.html'), name='logout'),
path('logout-then-login/', auth_views.logout_then_login, name='logout_then_login'),
]
Файл views.py
from django.contrib.auth import authenticate, login
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from django.shortcuts import render
@login_required
def dashboard(request):
return render(request, 'account/dashboard.html', {'section': 'dashboard'})
Шаблон base.html
{% load staticfiles %}
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" href="{% static "css/base.css" %}">
</head>
<body>
<div id="header">
<span class="logo">Bookmarks</span>
{% if request.user.is_authenticated %}
<ul class="menu">
<li> {% if section == "dashboard" %}class="selected"{% endif %}><a href="{% url "account:dashboard" %}">My dashboard</a></li>
<li> {% if section == "images" %}class="selected"{% endif %}<a href="#">Images</a></li>
<li> {% if section == "people" %}class="selected"{% endif %}<a href="#">People</a></li>
</ul>
{% endif %}
<span class="user">
{% if request.user.is_authenticated %}
Hello {{ request.user.first_name }}, <a href="{% url "account:logout %}">Logout</a>
{% else %}
<a href="{% url "account:dashboard" %}"></a>
{% endif %}
</span>
</div>
<div id="content">
{% block content %}
{% endblock %}
</div>
</body>
</html>
Я ценю вашу помощь. Большое спасибо!
Ответы
Ответ 1
Вы создали пространство имен для своих URL-адресов:
app_name = 'account'
Вы должны использовать это пространство имен при движении задним ходом адресов с reverse
/reverse_lazy
или {% url %}
:
LOGIN_REDIRECT_URL = reverse_lazy('account:dashboard')
LOGIN_URL = reverse_lazy('account:login')
LOGOUT_REDIRECT_URL = reverse_lazy('account:logout')
Ответ 2
Возможно, при указании {% url 'appname: views'%} вы указали неправильное имя приложения
Например, например:
wrong - {% url 'accuant:dashboard' %}
right - {% url 'account:dashboard' %}
Ответ 3
ОШИБКА === NoReverseMatch в /location/2 Реверс для add_device_to_location не найден. add_device_to_location не является допустимой функцией представления или именем шаблона.
Застрял здесь, пожалуйста, помогите.
url (r '^ location/(? P\d+) $', views.LocationDetailView.as_view(), name = 'location_detail'), url (r '^ location/(? P\d+)/edit/$',views.LocationUpdateView.as_view(),name='location_edit '), url (r' ^ location/(? P\d+)/device/$ ', views.add_device_to_location, name =' add_device_to_location '),
def add_device_to_location (request, pk):
location=get_object_or_404(RequestRaised,pk=pk)
if request.method == 'POST':
form=DeviceForm(request.POST)
if form.is_valid():
device=form.save(commit=False)
device.location=location
device.save()
return redirect('location_detail',pk=location.pk)
else:
form=DeviceForm()
return render(request,'mysite/requestraised_form.html',{'form':form})[**enter image description here**][1]