
- Internal Server Error: /app3/books/new/
- Traceback (most recent call last):
- File "D:\py\Lib\site-packages\django\views\generic\edit.py", line 116, in get_success_url
- url = self.object.get_absolute_url()
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- AttributeError: 'Book' object has no attribute 'get_absolute_url'
-
- During handling of the above exception, another exception occurred:
-
- Traceback (most recent call last):
- File "D:\py\Lib\site-packages\django\core\handlers\exception.py", line 47, in inner
- response = get_response(request)
- ^^^^^^^^^^^^^^^^^^^^^
- File "D:\py\Lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
- response = wrapped_callback(request, *callback_args, **callback_kwargs)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "D:\py\Lib\site-packages\django\views\generic\base.py", line 70, in view
- return self.dispatch(request, *args, **kwargs)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "D:\py\Lib\site-packages\django\views\generic\base.py", line 98, in dispatch
- return handler(request, *args, **kwargs)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "D:\py\Lib\site-packages\django\views\generic\edit.py", line 172, in post
- return super().post(request, *args, **kwargs)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- File "D:\py\Lib\site-packages\django\views\generic\edit.py", line 142, in post
- return self.form_valid(form)
- ^^^^^^^^^^^^^^^^^^^^^
- File "D:\py\Lib\site-packages\django\views\generic\edit.py", line 126, in form_valid
- return super().form_valid(form)
- ^^^^^^^^^^^^^^^^^^^^^^^^
- File "D:\py\Lib\site-packages\django\views\generic\edit.py", line 57, in form_valid
- return HttpResponseRedirect(self.get_success_url())
- ^^^^^^^^^^^^^^^^^^^^^^
- File "D:\py\Lib\site-packages\django\views\generic\edit.py", line 118, in get_success_url
- raise ImproperlyConfigured(
- django.core.exceptions.ImproperlyConfigured: No URL to redirect to. Either provide a url or define a get_absolute_url method on the Model.
这个错误表明Django在尝试重定向到新创建的对象的详情页面时找不到要去的URL。你有两种方式来解决这个问题:
get_absolute_url方法。这个方法应该返回一个URL,这个URL指向对象的详情页面。例如:Test/app3/models.py
- from django.db import models
-
- # Create your models here.
- from django.urls import reverse
- class Book(models.Model):
- title = models.CharField(max_length=200)
- author = models.CharField(max_length=100)
- publication_date = models.DateField()
-
-
- def get_absolute_url(self):
- return reverse('book_detail', args=[str(self.id)])

在这个例子中,get_absolute_url方法返回的URL是由名称为book_detail的URL模式生成的,这个URL模式应该接受一个参数(这里是self.id,也就是书籍的ID)。你需要在你的urls.py文件中定义一个名称为book_detail的URL模式。


Test/app3/views.py
- from django.shortcuts import render
-
- # Create your views here.
- from .models import Book
-
- from django.views.generic import ListView
- class BookListView(ListView):
- model = Book
- context_object_name = 'books'
- template_name = 'books/book_list.html'
- paginate_by = 10 # 设置展示页数数据
-
-
- from django.views.generic import DetailView
- class BookDetailView(DetailView):
- model = Book
- context_object_name = 'book'
- template_name = 'books/book_detail.html'
-
-
- from django.views.generic.edit import CreateView
- class BookCreateView(CreateView):
- model = Book
- template_name = 'books/book_form.html'
- fields = ['title', 'author', 'publication_date']
- success_url = '/app3/books/' # 重定向至书本列表路由地址


保存书籍后重定向至http://127.0.0.1:8000/app3/books/