django 中的反向函数出错。无法匹配模式

Posted

技术标签:

【中文标题】django 中的反向函数出错。无法匹配模式【英文标题】:Error with reverse function in django. Can't match a pattern 【发布时间】:2020-01-29 13:41:21 【问题描述】:

我正在使用 Django 创建我的第一个网站。在创建表单并将网站返回到刚刚创建的页面的详细信息页面时,我在 /books/books/add/ 遇到了这个 NoReverseMatch 问题 未找到带有关键字参数“'pk': 39”的“详细信息”的反向。尝试了 1 种模式:['books/(?P[0-9]+)/$ 我已经尝试在我的 urls.py 文件中修复我的 URL,但是对于这个我是新手,我无法让它工作。

  urls.py file
from django.conf.urls import url
from django.contrib import admin
from . import views

app_name = 'books'
URL patterns = [
    url(r'^books/$', views.index, name='index'),
    url(r'^$', views.index, name='index'),
    url(r'^(?P<book_id>[0-9]+)/$', views.detail, name='detail'),
    url(r'books/add/$',views.BookCreate.as_view(),name='book-add'),
]


model.py file 
from django.db import models

# Create your models here.
from django.core.urlresolvers import reverse


class Books(models.Model):

    def get_absolute_url(self):
        return reverse('books:detail', kwargs="pk":self.pk)

    def __str__(self):
        return self.name + '-' + self.author

    name = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    price = models.CharField(max_length=100)
    book_image = models.CharField(max_length=1000)

【问题讨论】:

你可以试试reverse('detail', kwargs="pk":self.pk)吗? @ruddra 试过了。发生以下错误:未找到“详细信息”的反向。 'detail' 不是有效的视图函数或模式名称 e 【参考方案1】:

将此方法更改为:

def get_absolute_url(self):
    return reverse('books:detail', kwargs="pk":self.pk)

收件人:

def get_absolute_url(self):
    return reverse('books:detail', kwargs="book_id":self.pk)

因为您在网址中使用&lt;book_id&gt;,而不是pk

【讨论】:

非常感谢。我对 Django 还是陌生的。您能否建议我从基础研究它的资源。 好吧,我想你可以看看:djangoproject.com/start 和 developer.mozilla.org/en-US/docs/Learn/Server-side/Django/…【参考方案2】:

您可以尝试这样构建模型:

class Books(models.Model):
    name = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    price = models.CharField(max_length=100)
    book_image = models.CharField(max_length=1000)

    def get_absolute_url(self):
        return reverse('books:detail', kwargs="pk":self.pk)

    def __str__(self):
        return self.name + '-' + self.author

【讨论】:

以上是关于django 中的反向函数出错。无法匹配模式的主要内容,如果未能解决你的问题,请参考以下文章

没有反向匹配 - django.urls.exceptions.NoReverseMatch

Django:密码重置时没有反向匹配[重复]

我怎样才能避免在 django 中没有反向匹配

第61篇 Django 路由系统 正则表达式和二级路由 路由的命名和反向解析

Django 没有反向匹配错误 - 模板渲染

四十七django路由匹配,分组,反向解析,路由分发,视图层