python - NoReverseMatch at/allbook Reverse for 'random_book' with arguments '(' ', )' not found. 1 pattern(s) tried: [' info/(?P<pk>[0-9]+)\\Z']

标签 python django

NoReverseMatch at/allbook Reverse for 'random_book' with arguments '('',)' not found.尝试了 1 种模式:['info/(?P[0-9]+)\Z']

View .py

class MoreInfoView(View):
    def get(self, request, id):
        book_info = BookModel.objects.filter(id=id).first()
        stuff = get_object_or_404(BookModel, id=self.kwargs['id'])
        total_likes = stuff.total_likes()
        return render(request, 'bookapp/more_info.html', context={
            'id': id,
            'book_info': book_info,
            'book': BookModel,
            'total_likes': total_likes,

        })

def random_book(self):
    book_pks = list(BookModel.objects.values_list('id', flat=True))
    pk = random.choice(book_pks)
    book = BookModel.objects.get(pk=pk)
    return HttpResponse(book)


html

<li class="navigation"><a class="nav-link" href="{% url 'random_book' pk %}">random</a></li>

网址.py

urlpatterns = [
   path('', index, name='index'),
   path('allbook', AllBookView.as_view(), name='allbook'),
   path('addbook', AddBookView.as_view(), name='addbook'),
   path('register', RegisterView.as_view(), name='reg'),
   path('login', LoginView.as_view(), name='login'),
   path('logout', LogoutView.as_view(), name='logout'),
   path('info/<int:id>', MoreInfoView.as_view(), name='more_info'),
   path('profile', profileview, name='profile'),
   path('password-change', ChangePasswordView.as_view(), name='change_pass'),
   path('like/<int:pk>', LikeView, name='like_book'),
   path('info/<int:pk>', views.random_book, name='random_book'),

最佳答案

random_book中移除参数:

urlpatterns = [
   # …
   path('random/', views.random_book, name='random_book')
]

以及来自 {% url … %} 模板标签:

<a class="nav-link" href="{% url 'random_book' %}">random</a>

You can not return the book itself as object. You should return for example the result of rendering a template:

from django.shortcuts import get_object_or_404, render

def random_book(self):
    book_pks = list(BookModel.objects.values_list('pk', flat=True))
    pk = random.choice(book_pks)
    book = get_object_or_404(BookModel, pk=pk)
    return render(request, '<em>some-template.html</em>', {'book': book})

Note: Models normally have no …Model suffix. Therefore it might be better to rename BookModel to Book.

关于python - NoReverseMatch at/allbook Reverse for 'random_book' with arguments '(' ', )' not found. 1 pattern(s) tried: [' info/(?P<pk>[0-9]+)\\Z'],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72062103/

相关文章:

python - 阴谋冲刺 : Hide/show slider component by updating different dropdown component

python - 从另一个文件导入列表

Django ORM 从查询集中提取工作日作为字符串

python - 带有 wsgi 的 Django 偶尔失败并显示 "Premature end of script headers:"

python - django:redis:CommandError: 你没有设置ASGI_APPLICATION,这是运行服务器所需要的

python - 使用 TensorFlow 2.x 版本从头开始进行 BERT 预训练

python - 使用 Python 进行 SQLite 查询

python - 如何为构建生成的脚本添加路径

django - 正在寻找 Django 应用程序来运行我的博客

python - Django 应用程序和 Django 内容类型之间有什么区别?