没有反向匹配为什么?

时间:2014-04-14 10:42:26

标签: django

每当我尝试打开我的localhost时就会收到此错误:8000恰好是我正在处理的应用程序的主页。

NoReverseMatch at /
Reverse for 'category_detail' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['category/(?P<slug>[\\-\\w]+)/$']

以下是模板中使用的{%url%},我的models.py,我的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'

以上是我的问题的总结。如有任何帮助表示赞赏。我确定它的问题很清楚,但是由于StackOverflow不让我发帖而不添加更多文字,我这样做了。我认为上面的摘录对我的问题是自我解释的。我想我现在已经发布了。

2 个答案:

答案 0 :(得分:4)

您的网址名称&#39; category_detail&#39;有强制参数 - slug。所以在模板中你可以写:

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

由于您的模型具有生成网址的特殊方法,因此您可以轻松完成:

{{ category.get_absolute_url }}

答案 1 :(得分:-1)

您的模板包含{% url 'category_detail' %},即尝试撤消“category_detail”网址格式,而不提供所需的slug关键字参数。这可能有效:

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