Django 没有反向匹配为什么?

Django 没有反向匹配为什么?,django,Django,每当我试图打开我的localhost:8000时,我都会遇到这个错误,它恰好是我正在使用的应用程序的主页 NoReverseMatch at / Reverse for 'category_detail' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['category/(?P<slug>[\\-\\w]+)/$'] NoReverseMatch位于/ 找不到参数为“()

每当我试图打开我的localhost:8000时,我都会遇到这个错误,它恰好是我正在使用的应用程序的主页

NoReverseMatch at /
Reverse for 'category_detail' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['category/(?P<slug>[\\-\\w]+)/$']
NoReverseMatch位于/
找不到参数为“()”且关键字参数为“{}”的“category_detail”的反转。尝试了1个模式:[“类别/(?P[\\-\\w]+)/$”]
下面是在模板中使用的{%url%}、my models.py、my urls.py和views.py

发生了什么事?我做错了什么

#in Template.
<a href="{% url 'category_detail' %}" class="button tiny">View</a>

#my urls.py
from django.conf.urls import patterns, url
from . import views

urlpatterns = patterns('',
    url(r'^$', views.home.as_view(), name='home'),
    url(r'^categories/$', views.MyCategory.as_view(), name='all_categories'),
    url(r'^category/(?P<slug>[-\w]+)/$', views.CategoryDetail.as_view(), name='category_detail'),
    url(r'^tip/(?P<slug>[-\w]+)/$', views.ToolkitDetail.as_view(), name='toolkit_detail'),
)

#my models.py
from django.db import models
from django.core.urlresolvers import reverse


class Category(models.Model):
    slug = models.SlugField()
    title = models.CharField(max_length=250)
    heading = models.CharField(max_length=750)
    description = models.TextField()
    link = models.URLField()

    def get_absolute_url(self):
        return reverse('category_detail', kwargs={'slug': self.slug})

#my views.py
class MyCategory(ListView):
    model = Category
    context_object_name = 'category'
    template_name = 'category.html'

class CategoryDetail(DetailView):
    slug_field = 'slug'
    model = Category
    slug_url_kwarg = 'slug'
    context_object_name = 'category'
    template_name = 'category_detail.html'
模板中的
#。
#我的URL.py
从django.conf.url导入模式,url
从…起导入视图
urlpatterns=模式(“”,
url(r'^$',views.home.as_view(),name='home'),
url(r“^categories/$”,views.MyCategory.as_view(),name='all_categories'),
url(r'^category/(?P[-\w]+)/$,views.categorydeail.as_view(),name='category_detail'),
url(r'^tip/(?P[-\w]+)/$,views.ToolkitDetail.as_view(),name='toolkit_detail'),
)
#我的模特
从django.db导入模型
从django.core.urlResolver反向导入
类别(models.Model):
slug=models.SlugField()
title=models.CharField(最大长度=250)
标题=型号.CharField(最大长度=750)
description=models.TextField()
link=models.URLField()
def get_绝对_url(自身):
返回反向('category_detail',kwargs={'slug':self.slug})
#我的观点
类别MyCategory(列表视图):
型号=类别
上下文\对象\名称='category'
模板名称='category.html'
类CategoryDetail(详细视图):
slug_字段='slug'
型号=类别
slug_url_kwarg='slug'
上下文\对象\名称='category'
模板名称='category\u detail.html'

以上是我问题的总结。如果您有任何帮助,我们将不胜感激。我确信我的问题已经很清楚了,但由于StackOverflow不允许我在不添加更多文本的情况下发布,我正在这样做。对于我的问题,我认为上面的摘录是不言自明的。我想我现在可以发布了。

您的模板包含
{%url'category\u detail%}
,即尝试反转“category\u detail”url模式,而不提供所需的
slug
关键字参数。这可能会奏效:

{% url 'category_detail' slug="foo" %}

您的url名称“category_detail”具有强制参数-slug。因此,在模板中,您可以编写:

<a href="{% url 'category_detail' category.slug %}" class="button tiny">View</a>

那么,在slug=“foo”中,由于URL是动态生成的,所以我在“foo”部分中放了什么?有趣的答案。category_detail通常是特定类别的详细视图,因此您需要告诉它您想要什么类别。你是通过提供鼻涕来实现的。你知道吗,尤金,你的第一个建议不起作用。然而,第二种方法是BAAM!!为了我。成功了!但它仍然让我感到疑惑,因为我在使用django版本1.5的上一个项目中成功地使用了{%url'文本“%”。那么,为什么url突然不起作用呢?或者它也与URL的正则表达式有关?谢谢你的帮助。我很高兴我现在可以链接我的页面了。正如我在回答中所写的,你们必须在url名称之后将强制参数传递给url模板标记。此参数在urls.py和view函数中确定。奇怪的是,正如您之前所说,django在admin中使用了get_absolute_url方法。在自定义模板中,您应该像我写的那样自己调用它。可以两个都在工作。第一次提第一个建议时,我做得不对。我在调用一个不存在的变量。我很高兴知道这一点。谢谢你的帮助。
{{ category.get_absolute_url }}