No.Reverse Match at“”Reverse for“”with arguments'()'和关键字参数'{}'

时间:2014-08-09 20:44:25

标签: django django-templates django-urls

我正在尝试显示Django中列表视图的链接列表,但我一直收到“NoReverse Match”错误。

模板

{% for posts in all_posts %}
<a href="{% url 'blog:blog_single' posts.slug %}">{{posts.title}}</a>
{% endfor %}

浏览

from blog.models import Posts
from main_site.views import LayoutView

class BlogView(LayoutView, generic.ListView):
    template_name = 'blog/blog.html'
    model = Posts
    context_object_name = 'all_posts'

博客/网址

urlpatterns = patterns('',
    url(r'^(?P<slug>\w+)/$', views.SingleView.as_view(), name='blog_single'),
    url(r'^$', views.BlogView.as_view(), name='blog_home'),
)

项目/网址

urlpatterns = patterns('',
    url(r'^blog/', include('blog.urls', namespace='blog')),
)

slug是我的模型中的属性设置为models.SlugField(),如果我输出为{{posts.slug}},它会显示出来,所以我知道它不是空的。我在项目中的另一个应用程序中设置了类似的链接工作正常(完全相同的设置 - url'命名空间:名称')所以我不确定是什么导致这打破。

完整错误是:

NoReverseMatch at /blog/

Reverse for 'blog_single' with arguments '(u'test-slug',)' and keyword arguments '{}' not found. 1 pattern(s) tried: [u'blog/(?P<slug>\\w+)/$']

1 个答案:

答案 0 :(得分:1)

这是因为你的网址格式不好。

url(r'^(?P<slug>\w+)/$', views.SingleView.as_view(), name='blog_single'),

期待\ w +(即任何字母字符,数字字符或下划线)。但是你正在为它提供一个包含短划线(“ - ”)的文本。

所以你需要改变你的slug或url模式:

url(r'^(?P<slug>[\w-]+)/$', views.SingleView.as_view(), name='blog_single'),