尝试了NoReverseMatch get_absolute_url 0模式

时间:2015-06-09 18:19:13

标签: python django

我去http://127.0.0.1:8000/books/author/时收到错误:

  

/ books / author /

中的NoReverseMatch      

使用参数'()'和关键字反转'/ books / author / 1 /'   没有找到参数“{}”。尝试了0种模式:[]

我的观点是ListView,模板代码在

之下
<ul>
{% for author in object_list %}
    <li><a href="{% url author.get_absolute_url %}">{{ author.name }} </a></li>
{% endfor %}
</ul>

当我将模板更改为:

时,它可以正常工作
<ul>
{% for author in object_list %}
    <li><a href="{% url 'bookstore:author-details' author.pk %}">{{ author.name }} </a></li>
{% endfor %}
</ul>

我的models.py包含定义了get_absolute_url()

的类作者
class Author(models.Model):
    name = models.CharField(max_length=200)
    birthday = models.DateField()
    photo = models.ImageField(blank=True)
    nickname = models.CharField(max_length=200, blank=True)

    def get_absolute_url(self):
        return reverse('bookstore:author-details', kwargs={'pk': self.pk})

主要urls.py包含命名空间

urlpatterns = [
    url(r'^books/', include('bookstore.urls', namespace='bookstore')),
]

这是bookstore.urls

urlpatterns = [
    url(r'^author/', include([
        url(r'^$', views.AuthorsList.as_view(), name='authors-list'),
        url(r'^create/', views.AuthorCreate.as_view(), name='author-create'),
        url(r'^(?P<pk>[0-9]+)/', include([
            url(r'^$', views.AuthorDetails.as_view(), name='author-details'),
            url(r'edit/', views.AuthorEdit.as_view(), name='author-edit'),
            url(r'delete/', views.AuthorDelete.as_view(), name='author-delete'),
    ]))
    ])),
]

3 个答案:

答案 0 :(得分:3)

你混合了两种方法,即:

$ git rebase --interactive --onto dev dev utu # <-- hit tab, ta-dah: $ git rebase --interactive --onto dev dev utumno- https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#url

{% url "routing-name" arguments %} https://docs.djangoproject.com/en/1.8/ref/urlresolvers/#reverse

这两种方法都返回一个字符串,表示某个路由的地址(在您的情况下为'/ books / author / 1 /')。

您现在要做的是将reverse("routing-name", [arguments])的结果提供给reverse()功能。文字这导致url。现在Django抱怨路由'/ books / author / 1 /'不存在。

解决方案:{% url '/books/author/1/' %}

答案 1 :(得分:0)

self.pk是一个整数,你需要一个字符串。

更改:

def get_absolute_url(self):
    return reverse('bookstore:author-details', kwargs={'pk': self.pk})

到:

def get_absolute_url(self):
    return reverse('bookstore:author-details', kwargs={'pk': str(self.pk)})

也可以改为使用args:

def get_absolute_url(self):
    return reverse('bookstore:author-details', args=[str(self.pk)])

答案 2 :(得分:0)

Django 1.5+需要在url模板标记

中的方法名称周围加引号
{% url author.get_absolute_url %}

变为

{% url 'author.get_absolute_url' %}