简体   繁体   English

NoReverseMatch at / 模板渲染期间出错

[英]NoReverseMatch at / Error during template rendering

When I open http://127.0.0.1:8000/ which is home.html , I am getting:当我打开http://127.0.0.1:8000/这是home.html ,我得到:

NoReverseMatch at / and Reverse for 'exam-detail' with arguments '('',)' not found. NoReverseMatch at / 和 Reverse for 'exam-detail' with arguments '('',)' 未找到。 1 pattern(s) tried: ['exam/(?P[^/]+)$']尝试了 1 个模式:['exam/(?P[^/]+)$']

I think the error is due to <str:pk> in urls.py .我认为该错误是由于urls.py <str:pk>的。

The urls.py file is below: urls.py文件如下:


from . import views
from .views import ExamListView, ExamDetailView

app_name='map'
urlpatterns = [
    path("", ExamListView.as_view(), name='map-home'),
    path("exam/<str:pk>", ExamDetailView.as_view(), name="exam-detail"),
    path("login_student/", views.login_student, name='map-login'),
    path("register_student", views.register_student, name='map-register'),
    path('add_student/', views.add_student, name='add_student'),
    path('front/', views.front, name="front"),
]

models.py :模型.py

    subject = models.TextField(primary_key = True, unique = True)

    def __str__(self):
        return self.subject

home.html主页.html

{% extends "map/base.html" %}
{% block content %}
    <p>WELCOME HOME</p>
    {% for exam in exams %}
        <article class="media content-section">
            <div class="media-body">
                <div class="article-metadata">
                    <a class="mr-2" href="{% url 'map:exam-detail' exam.subject %}">{{ exam }} </a>
                </div>
            </div>
        </article>
    {% endfor %}
{% endblock content %}

base.html基本文件

{% load static %}
<!DOCTYPE html>
<html>
<head>
     <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">

<link rel="stylesheet" type="text/css" href="{% static 'map/main.css' %}">

    {% if title %}
        <title>{{ title }}</title>
    {% else %}
        <title> MAP PAGE </title>
    {% endif %} 
</head>
<body>
        <header class="site-header">
      <nav class="navbar navbar-expand-md navbar-dark bg-steel fixed-top">
        <div class="container">
          <a class="navbar-brand mr-4" href="/">Project M.A.P</a>
          <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarToggle" aria-controls="navbarToggle" aria-expanded="false" aria-label="Toggle navigation">
          <span class="navbar-toggler-icon"></span>
          </button>
          <div class="collapse navbar-collapse" id="navbarToggle">
            <div class="navbar-nav mr-auto">
              <a class="nav-item nav-link" href="{% url 'map:map-home' %}">Home</a>  <!-- no hardcoded links -->
              <a class="nav-item nav-link" href="{% url 'map:map-home' %}">About</a>
            </div>
            <!-- Navbar Right Side -->
            <div class="navbar-nav">
              {% if user.is_authenticated %}
                  <a class="nav-item nav-link" href="{% url 'profile' %}">Profile</a>
                  <a class="nav-item nav-link" href="{% url 'logout' %}">Logout</a>
              {% else %}
              <a class="nav-item nav-link" href="{% url 'login' %}">Login</a>
              <a class="nav-item nav-link" href="{% url 'register' %}">Register</a>
              <a class="nav-item nav-link" href="{% url 'map:map-register' %}">Student</a>
              {% endif %}
            </div>
          </div>
        </div>
      </nav>
    </header>
    <main role="main" class="container">
      <div class="row">
        <div class="col-md-8">
            {% if messages %}
                {% for message in messages %}
                    <div class="alert alert-{{ message.tags }}">
                        {{ message }}
                    </div>
                {% endfor %}
            {% endif %}
          {% block content %}{% endblock %}

        </div>
        <div class="col-md-4">
          <div class="content-section">
            <h3>Our Sidebar</h3>
            <p class='text-muted'>You can put any information here you'd like.
              <ul class="list-group">
                <li class="list-group-item list-group-item-light">Latest Posts</li>
                <li class="list-group-item list-group-item-light">Announcements</li>
                <li class="list-group-item list-group-item-light">Calendars</li>
                <li class="list-group-item list-group-item-light">etc</li>
              </ul>
            </p>
          </div>
        </div>
      </div>
    </main>


     <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>

</body>
</html>[enter image description here][1]

views.py视图.py

from django.shortcuts import render
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from django.urls import reverse

from . models import Student, Exam
from django.views.generic import ListView, DetailView

def home(request):
    context = {
        'exams': Exam.objects.all()
    }
    return render(request, 'map/home.html', context)

class ExamListView(ListView): #class based views
    model = Exam
    template_name = 'map/home.html'  #<app>/<model>_<viewtype>.html
    context_object_name = 'exams'
    ordering = ['subject'] #['-exam']


class ExamDetailView(DetailView):
    model = Exam

You missed exam.pk in the home.html Update your code in this manner,您错过了 home.html 中的exam.pk 以这种方式更新您的代码,

<div class="article-metadata">
<a class="mr-2" href="{% url 'map:exam-detail' 
exam.pk %}">{{ exam }} </a>
 </div>
 </div>

In python manage.py shell在 python manage.py shell 中

from my_app_name.models import Exam

exam = Exam()
exam.subject = ""
exam.save()

I have executed these lines.我已经执行了这些行。 and I also created exams for subject like "google", "english",..我还为“谷歌”、“英语”等主题创建了考试。

Now Exam.objects.all() returns现在Exam.objects.all()返回

<QuerySet [<Exam: google>, <Exam: english>, <Exam: >]>

The problem is due to having a string of length zero as subject for one of the exam object.问题是由于有一个长度为零的字符串作为其中一个考试对象的主题。 Now I deleted that exam using Exam.objects.get(subject="").delete() .现在我使用Exam.objects.get(subject="").delete()删除了那个考试。 Problem solved.问题解决了。

{% url 'map:exam-detail' exam.subject %}

or或者

{% url 'map:exam-detail' exam %}

or或者

{% url 'map:exam-detail' exam.pk %}

all these are working now because all are returning the subject.所有这些现在都在起作用,因为所有这些都在返回主题。 But {% url 'map:exam-detail' exam.id %} won't work .但是{% url 'map:exam-detail' exam.id %}不起作用 Because I have made subject as primary_key in the Exam model , so Exam model don't have an attribute id(which is added by default when no primary_key is mentioned).因为我在Exam 模型中将subject作为primary_key ,所以 Exam model 没有属性 id(当没有提到 primary_key 时默认添加)。

thinking about why it has accepted the empty string as a subject, though I have defined it as primary_key.考虑为什么它接受空字符串作为主题,尽管我已将其定义为primary_key。 Then I wanna read about django.db.models.TextField and just keyed help(TextField) and got然后我想阅读关于 django.db.models.TextField 和刚刚键入的 help(TextField) 并得到

TextField(verbose_name=None, name=None, primary_key=False, max_length=None, unique=False, blank=False, null=False, db_index=False, rel=None, default=<class 'django.db.models.fields.NOT_PROVIDED'>, editable=True, serialize=True, unique_for_date=None, unique_for_month=None, unique_for_year=None, choices=None, help_text='', db_column=None, db_tablespace=None, auto_created=False, validators=(), error_messages=None)

Now tried validators ... The follow up problem link现在尝试验证器...后续问题链接

Thank you all Mounika谢谢大家穆尼卡

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM