我需要帮助解决这个Django错误。我已经搜索并完成了我学到的东西,但我无法破译这个问题。我正在尝试使用DetailView类显示该书的详细信息
Model.py
from django.db import models
from django.urls import reverse
.
class Notes(models.Model):
note_topic = models.CharField(max_length=200, blank=False)
note_body = models.TextField(null=True, blank=True)
slug = models.SlugField(null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self) -> str:
return self.note_topic
def get_absolute_url(self):
return reverse('notebooks:note-detail', kwargs={'slug' : self.slug})
```
**view.py**
from django.utils import timezone
from django.shortcuts import render
from django.views.generic import ListView, DetailView, CreateView,
UpdateView, DeleteView
from .models import Notes
class NotesView(ListView):
model = Notes
template_name = 'notes.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['notes'] = Notes.objects.all()
return context
class NotesDetailView(DetailView):
model = Notes
template_name = 'note-detail.html'
context_object_name = 'note'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['time'] = timezone.now()
return context
```
项目的url.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('notes/', include('notebooks.urls', namespace='notes')),
path('admin/', admin.site.urls),
]
笔记本/url.py
from django.urls import path
from .views import NotesView, NotesDetailView
app_name = 'notebooks'
urlpatterns = [
path('', NotesView.as_view(), name='notes'),
path('detail/<slug:slug>/', NotesDetailView.as_view(),
name='note-detail'),
]
note.html笔记本应用程序主页
{% extends 'base.html' %}
{% block title %} List of Notebooks {% endblock title %}
{% block content %}
<div class="col-7 mt-4">
<div class="list-group">
<button type="button" class="list-group-item list-group-item-
action active" aria-
current="true">
List Of Notebooks
</button>
{% for item in object_list %}
<a href="{% url 'notebooks:note-detail' slug=note.slug %}">
<h1>{{item.note_topic}}</h1>
</a>
<br>
<p>{{item.note_body}}</p>
{% endfor %}
</div>
</div>
{% endblock content %}
note detail.html
{% extends 'base.html' %}
{% block title %} Detail of Notes {% endblock title %}
{% block content %}
<h1>{{ note.note_topic }}</h1>
<p>{{ note.note_body }}</p>
<p>Published: {{ note.created_at|date }}</p>
<p>Date: {{ time|date }}</p>
{% endblock content %}
下面是完整的回溯
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/notes/
Django Version: 3.2.5
Python Version: 3.9.5
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'notebooks']
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\KINGSLEY\projects\webProjects\classroom\templates\base.html, error at line 8
Reverse for 'note-detail' with keyword arguments '{'slug': ''}' not found. 1 pattern(s) tried: ['notes/detail/(?P<slug>[-a-zA-Z0-9_]+)/$']
1 : <!DOCTYPE html>
2 : <html lang="en">
3 : <head>
4 : <meta charset="UTF-8">
5 : <meta http-equiv="X-UA-Compatible" content="IE=edge">
6 : <meta name="viewport" content="width=device-width, initial-scale=1.0">
7 : <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet">
8 : <script src="https://cdn.jsdelivr.n et/npm/bootstrap@5.0.0-beta2/dist/js/bootstr ap.bundle.min.js"></script>
9 : <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.min.js"></script>
10 : <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.min.css"/>
11 : <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
12 : <title>{% block title %}{% endblock title %}</title>
13 : </head>
14 : <body>
15 :
16 : <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
17 : <div class="container-fluid">
18 : <a class="navbar-brand" href="#">List of Notes</a>
Traceback (most recent call last):
File "C:\Users\KINGSLEY\projects\webProjects\env\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\KINGSLEY\projects\webProjects\env\lib\site-packages\django\core\handlers\base.py", line 204, in _get_response
response = response.render()
File "C:\Users\KINGSLEY\projects\webProjects\env\lib\site-packages\django\template\response.py", line 105, in render
self.content = self.rendered_content
File "C:\Users\KINGSLEY\projects\webProjects\env\lib\site-packages\django\template\response.py", line 83, in rendered_content
return template.render(context, self._request)
File "C:\Users\KINGSLEY\projects\webProjects\env\lib\site-packages\django\template\backends\django.py", line 61, in render
return self.template.render(context)
File "C:\Users\KINGSLEY\projects\webProjects\env\lib\site-packages\django\template\base.py", line 170, in render
return self._render(context)
File "C:\Users\KINGSLEY\projects\webProjects\env\lib\site-packages\django\template\base.py", line 162, in _render
return self.nodelist.render(context)
File "C:\Users\KINGSLEY\projects\webProjects\env\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\KINGSLEY\projects\webProjects\env\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\KINGSLEY\projects\webProjects\env\lib\site-packages\django\template\loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "C:\Users\KINGSLEY\projects\webProjects\env\lib\site-packages\django\template\base.py", line 162, in _render
return self.nodelist.render(context)
File "C:\Users\KINGSLEY\projects\webProjects\env\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\KINGSLEY\projects\webProjects\env\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\KINGSLEY\projects\webProjects\env\lib\site-packages\django\template\loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "C:\Users\KINGSLEY\projects\webProjects\env\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\KINGSLEY\projects\webProjects\env\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\KINGSLEY\projects\webProjects\env\lib\site-packages\django\template\defaulttags.py", line 211, in render
nodelist.append(node.render_annotated(context))
File "C:\Users\KINGSLEY\projects\webProjects\env\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\KINGSLEY\projects\webProjects\env\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\KINGSLEY\projects\webProjects\env\lib\site-packages\django\urls\base.py", line 86, in reverse
return resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
File "C:\Users\KINGSLEY\projects\webProjects\env\lib\site-packages\django\urls\resolvers.py", line 694, in _reverse_with_prefix
raise NoReverseMatch(msg)
Exception Type: NoReverseMatch at /notes/
Exception Value: Reverse for 'note-detail' with keyword arguments '{'slug': ''}' not found. 1 pattern(s) tried: ['notes/detail/(?P<slug>[-a-zA-Z0-9_]+)/$']
我似乎不明白发生了什么事
更新此行将解决所有问题:
在项目的
url.py
中,您应该在路径上指定namespace
,以匹配笔记本中的app_name
的url.py
此外,在有
<a href="{% url 'notebooks:note-detail' slug=note.slug %}">
的地方,它应该是<a href="{% url 'notebooks:note-detail' slug=item.slug %}">
,因为这在对象列表上的循环之间。为了便于将来参考,您可以在模型对象上使用get_absolute_url。省得你头疼例如,您可以使用:
这仍然相当于:
这使得工作做得更好,而且更干净,更容易阅读
相关问题 更多 >
编程相关推荐