登录视图 Django 中没有反向匹配,html 模板解析错误

问题描述

我的 Django 应用程序有问题。 我的 base.html 模板可以在某些视图中解析,但不能在所有视图中解析并返回错误代码

我对 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 %}

模板的文件结构: 模板/基础 html 模板/注册/登录 html 模板/用户/仪表板 html

url 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/",]

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 62,in render
    result = block.nodelist.render(context)
  File "C:\Users\Fabian\Desktop\Files\Programmering\stemdirekte\venv\lib\site-packages\django\template\base.py",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>