登录视图 Django 中没有反向匹配,html 模板解析错误
No Reverse Match in login view Django, html template parsing error
我的 Django 应用程序有问题。
我的 base.html 模板可以在某些视图中解析,但不能在所有视图中解析,并且 returns 错误代码
我对 django 的经验不多,但它似乎可以在视图彼此相距不太远时解析模板。
我的结构也很糟糕,但我不知道如何正确构建 django 网站。
登录文件(不起作用):
<!--hovedside/templates/registration/login.html-->
{% extends "base.html" %}
{% block body %}
<h2>Login</h2>
<form method="POST">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="Login"></input>
</form>
<a href="{% url dashboard %}">Back to dashboard</a>
{% endblock body %}
仪表板文件(有效):
<!--hovedside/templates/users/dashboard.html-->
{% extends "base.html" %}
{% block body %}
<div class="default-bodycontainer">
<h1>Hello, {{ user.username|default:'Guest' }}!</h1>
</div>
{% endblock body %}
模板的文件结构:
templates/base html
templates/registration/login html
templates/users/dashboard html
网址python文件
from django.urls import path
from django.conf.urls import include, url
from . import views
app_name = "hovedside"
urlpatterns =[
path("", views.index, name="index"),
path("dashboard/", views.dashboard, name="dashboard"),
#path("accounts/", include("django.contrib.auth.urls")),
url(r"^accounts/", include("django.contrib.auth.urls")),
]
来自 base.html 的问题行:
<link rel="icon" href="{% static 'hovedside/img/favicon.ico' %}">
这只是 html 模板中带有 static 的第一行。
[文件结构][1]
完整代码在这里:
https://github.com/lolThinked/Stemdirekte
错误代码如下:
'''
Environment:
Request Method: GET
Request URL: http://localhost:8000/stemdirekte/accounts/login/
Django Version: 3.1.4
Python Version: 3.6.6
Installed Applications:
['users',
'hovedside.apps.HovedsideConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Template error:
In template C:\Users\Fabian\Desktop\Hopland Digital\Prosjekter\Stemdirekte\mysite\hovedside\templates\base.html, error at line 10
Reverse for '' not found. '' is not a valid view function or pattern name.
1 : <!DOCTYPE html>
2 : <html lang="en">
3 : <head>
4 : <meta charset="UTF-8">
5 : <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 : <title>
7 : {{page_title}}
8 : </title>
9 : {% load static %}
10 : <link rel="icon" href=" {% static 'hovedside /img/favicon.ico' %}">
11 : <style>
12 : @font-face {
13 : font-family: 'BERNHC';
14 : src: local('BERNHC'),
15 : url('{% static "hovedside/fonts/BERNHC.ttf" %}'), format("truetype");
16 : }
17 : body{
18 : font-family: "BERNHC";
19 : }
20 : </style>
Traceback (most recent call last):
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\core\handlers\base.py", line 202, in _get_response
response = response.render()
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\response.py", line 105, in render
self.content = self.rendered_content
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\response.py", line 83, in rendered_content
return template.render(context, self._request)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\backends\django.py", line 61, in render
return self.template.render(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\base.py", line 170, in render
return self._render(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\base.py", line 162, in _render
return self.nodelist.render(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\base.py", line 162, in _render
return self.nodelist.render(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\defaulttags.py", line 446, in render
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\urls\base.py", line 87, in reverse
return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\urls\resolvers.py", line 685, in _reverse_with_prefix
raise NoReverseMatch(msg)
Exception Type: NoReverseMatch at /stemdirekte/accounts/login/
Exception Value: Reverse for '' not found. '' is not a valid view function or pattern name.
'''
[1]: https://i.stack.imgur.com/f9H0E.png
问题出在您的登录模板上。它试图使用名为 dashboard
的变量的值而不是字符串 "dashboard"
.
<a href="{% url 'dashboard' %}">Back to dashboard</a>
答案:
<a href="{% url 'dashboard' %}">Back to dashboard</a>
正如@schillingt 指出的那样,我需要将它指向字符串仪表板。
其他问题:
这也提出了一个后来的问题,我想这是因为我的结构,我需要 link 到
{% url 'hovedside:dashboard' %}
然后我需要将其添加到 mysite 应用程序而不是应用程序 hovedside 的 url,因为包含的 links 直接转到:
accounts/login
而不是
stemdirekte/accounts/login
所以我需要将这些网址添加到像这样安装的 mysite 网址中。
mysite/urls.py:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path("stemdirekte/", include("hovedside.urls")),
path("hovedside/", include("hovedside.urls")),
path("accounts/", include("django.contrib.auth.urls")),
]
我的 Django 应用程序有问题。 我的 base.html 模板可以在某些视图中解析,但不能在所有视图中解析,并且 returns 错误代码
我对 django 的经验不多,但它似乎可以在视图彼此相距不太远时解析模板。
我的结构也很糟糕,但我不知道如何正确构建 django 网站。
登录文件(不起作用):
<!--hovedside/templates/registration/login.html-->
{% extends "base.html" %}
{% block body %}
<h2>Login</h2>
<form method="POST">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="Login"></input>
</form>
<a href="{% url dashboard %}">Back to dashboard</a>
{% endblock body %}
仪表板文件(有效):
<!--hovedside/templates/users/dashboard.html-->
{% extends "base.html" %}
{% block body %}
<div class="default-bodycontainer">
<h1>Hello, {{ user.username|default:'Guest' }}!</h1>
</div>
{% endblock body %}
模板的文件结构: templates/base html templates/registration/login html templates/users/dashboard html
网址python文件
from django.urls import path
from django.conf.urls import include, url
from . import views
app_name = "hovedside"
urlpatterns =[
path("", views.index, name="index"),
path("dashboard/", views.dashboard, name="dashboard"),
#path("accounts/", include("django.contrib.auth.urls")),
url(r"^accounts/", include("django.contrib.auth.urls")),
]
来自 base.html 的问题行:
<link rel="icon" href="{% static 'hovedside/img/favicon.ico' %}">
这只是 html 模板中带有 static 的第一行。 [文件结构][1]
完整代码在这里: https://github.com/lolThinked/Stemdirekte
错误代码如下: '''
Environment:
Request Method: GET
Request URL: http://localhost:8000/stemdirekte/accounts/login/
Django Version: 3.1.4
Python Version: 3.6.6
Installed Applications:
['users',
'hovedside.apps.HovedsideConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Template error:
In template C:\Users\Fabian\Desktop\Hopland Digital\Prosjekter\Stemdirekte\mysite\hovedside\templates\base.html, error at line 10
Reverse for '' not found. '' is not a valid view function or pattern name.
1 : <!DOCTYPE html>
2 : <html lang="en">
3 : <head>
4 : <meta charset="UTF-8">
5 : <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 : <title>
7 : {{page_title}}
8 : </title>
9 : {% load static %}
10 : <link rel="icon" href=" {% static 'hovedside /img/favicon.ico' %}">
11 : <style>
12 : @font-face {
13 : font-family: 'BERNHC';
14 : src: local('BERNHC'),
15 : url('{% static "hovedside/fonts/BERNHC.ttf" %}'), format("truetype");
16 : }
17 : body{
18 : font-family: "BERNHC";
19 : }
20 : </style>
Traceback (most recent call last):
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\core\handlers\base.py", line 202, in _get_response
response = response.render()
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\response.py", line 105, in render
self.content = self.rendered_content
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\response.py", line 83, in rendered_content
return template.render(context, self._request)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\backends\django.py", line 61, in render
return self.template.render(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\base.py", line 170, in render
return self._render(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\base.py", line 162, in _render
return self.nodelist.render(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\base.py", line 162, in _render
return self.nodelist.render(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\template\defaulttags.py", line 446, in render
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\urls\base.py", line 87, in reverse
return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "C:\Users\Fabian\Desktop\Files\Programmering\Stemdirekte\venv\lib\site-packages\django\urls\resolvers.py", line 685, in _reverse_with_prefix
raise NoReverseMatch(msg)
Exception Type: NoReverseMatch at /stemdirekte/accounts/login/
Exception Value: Reverse for '' not found. '' is not a valid view function or pattern name.
''' [1]: https://i.stack.imgur.com/f9H0E.png
问题出在您的登录模板上。它试图使用名为 dashboard
的变量的值而不是字符串 "dashboard"
.
<a href="{% url 'dashboard' %}">Back to dashboard</a>
答案:
<a href="{% url 'dashboard' %}">Back to dashboard</a>
正如@schillingt 指出的那样,我需要将它指向字符串仪表板。
其他问题:
这也提出了一个后来的问题,我想这是因为我的结构,我需要 link 到
{% url 'hovedside:dashboard' %}
然后我需要将其添加到 mysite 应用程序而不是应用程序 hovedside 的 url,因为包含的 links 直接转到:
accounts/login
而不是
stemdirekte/accounts/login
所以我需要将这些网址添加到像这样安装的 mysite 网址中。 mysite/urls.py:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path("stemdirekte/", include("hovedside.urls")),
path("hovedside/", include("hovedside.urls")),
path("accounts/", include("django.contrib.auth.urls")),
]