我是django的新手。我在做一个项目
这是我的书详情查看::
class BookDetailView(generic.DetailView):
model = models.Book
template_name = 'catalog/book_detail.html'
这是我的renewbooklibririan,它在视图中定义::
def renew_book_librarian(request, pk):
"""
View function for renewing a specific BookInstance by librarian
"""
book_inst=get_object_or_404(models.BookInstance, pk = pk)
# If this is a POST request then process the Form data
if request.method == 'POST':
# Create a form instance and populate it with data from the request (binding):
form = RenewBookForm(request.POST)
# Check if the form is valid:
if form.is_valid():
# process the data in form.cleaned_data as required (here we just write it to the model due_back field)
book_inst.due_back = form.cleaned_data['renewal_date']
book_inst.save()
# redirect to a new URL:
return HttpResponseRedirect(reverse('catalog:my-borrowed') )
# If this is a GET (or any other method) create the default form.
else:
proposed_renewal_date = datetime.date.today() + datetime.timedelta(weeks=3)
form = RenewBookForm(initial={'renewal_date': proposed_renewal_date,})
return render(request, 'catalog/book_renew_librarian.html', {'form': form, 'bookinst':book_inst})
这是我的url模式:
urlpatterns = [
path('', views.Index.as_view(), name = "index"),
path('books/', views.BookListView.as_view(), name = "books"),
path('authors/', views.AuthorListView.as_view(), name = 'authors'),
path('book/<int:book_id>/', views.BookDetailView.as_view(), name = "book-detail"),
path('mybooks/', views.LoanedBooksByUserListView.as_view(), name = 'my-borrowed'),
path('book/<int:book_id>/renew/', views.renew_book_librarian, name='renew-book-librarian' )
]
我的代码一直在工作,直到在url中添加续订图书libririan。当我添加这个url时,我有这样的错误::(通用详细信息视图BookDetailView必须在URLconf中使用对象pk或slug调用。(
有人能帮我吗??!!
默认情况下,DetailView
将查找名为pk
或slug
的url参数以获取项目。但在这里,您将参数命名为book_id
。
但是,您可以在pk_url_kwarg
[Django-doc]中指定url参数的名称:
class BookDetailView(generic.DetailView):
model = models.Book
pk_url_kwarg = 'book_id'
template_name = 'catalog/book_detail.html'
对于基于函数的视图,参数的名称应该是book_id
:
def renew_book_librarian(request, book_id):
book_inst=get_object_or_404(models.BookInstance, pk=book_id)
# …