Django NoReverseMatch-与#x27相反;细节';找不到带参数和关键字参数{}

Django NoReverseMatch-与#x27相反;细节';找不到带参数和关键字参数{},django,Django,由于某种原因,我似乎无法解决此错误。我正在使用Django 1.5 我得到的实际错误是 Reverse for 'detail' with arguments '()' and keyword arguments '{u'slug': u'third-post'}' not found. 在我的projest目录中,我有一个url.py from django.conf.urls import patterns, include, url # Uncomment the next two l

由于某种原因,我似乎无法解决此错误。我正在使用Django 1.5

我得到的实际错误是

Reverse for 'detail' with arguments '()' and keyword arguments '{u'slug': u'third-post'}' not found.
在我的projest目录中,我有一个url.py

from django.conf.urls import patterns, include, url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'blog.views.home', name='home'),
    # url(r'^blog/', include('blog.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),

    #include the blogapp url
    url(r'', include('blogapp.urls', namespace='blog')),
)
my app文件夹中的url.py如下所示

urlpatterns = patterns ('',

    url(r'^$', 
            ListView.as_view(
                    queryset = Post.objects.order_by('-pub_date')[:5],
                    context_object_name = 'latest_posts',
                    template_name = 'blogapp/default.html'),
            name = 'index'
        ),

    url(r'^post/(?P<slug>\w+)/$',
            PostDetailView.as_view(),
            name = 'detail'
        ),
)
class PostDetailView(DetailView):

    template_name = 'blogapp/post/detail.html'

    def get_object(self):
        return get_object_or_404(Post, slug__iexact = self.kwargs['slug'])
我的html中有这个

{% for p in latest_posts %}
      <li><a href="{% url 'blog:detail' p.slug %}">{{p.title}}</a></li>
{% endfor %}
奇怪的是,在我的html中,这行代码是有效的

<li><a href="{% url 'blog:detail' p.id %}">{{p.title}}</a></li>
  • 为什么p.id有效而p.slug无效

    这是回溯

    Environment:
    
    
    Request Method: GET
    Request URL: http://127.0.0.1:8000/
    
    Django Version: 1.5
    Python Version: 2.7.2
    Installed Applications:
    ('django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.sites',
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'django.contrib.admin',
     'django.contrib.admindocs',
     'south',
     'blogapp')
    Installed Middleware:
    ('django.middleware.common.CommonMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware')
    
    
    Template error:
    In template .../Development/Python/Django/dev/blog/blogapp/templates/blogapp/default.html, error at line 11
       Reverse for 'detail' with arguments '()' and keyword arguments '{u'slug': u'third-post'}' not found.
       1 : {% extends "blogapp/base.html" %}
    
    
       2 : 
    
    
       3 : {% block title %}Blog Posts{% endblock %}
    
    
       4 : 
    
    
       5 : {% block body %}
    
    
       6 : 
    
    
       7 :     {% if latest_posts %}
    
    
       8 :         <p>Latest 5 blog posts</p>
    
    
       9 :             <ul>
    
    
       10 :                 {% for p in latest_posts %}
    
    
       11 :                     <li><a href=" {% url 'blog:detail' slug=p.slug %} ">{{p.title}}</a></li>
    
    
       12 :                 {% endfor %}
    
    
       13 :             </ul>
    
    
       14 :     {% else %}
    
    
       15 :         <p>No blog posts published.</p>
    
    
       16 :     {% endif %}
    
    
       17 : 
    
    
       18 : {% endblock %}
    
    
       19 : 
    
    
       20 : 
    
    Traceback:
    File ".../.virtualenvs/env1/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
      140.                     response = response.render()
    File ".../.virtualenvs/env1/lib/python2.7/site-packages/django/template/response.py" in render
      105.             self.content = self.rendered_content
    File ".../.virtualenvs/env1/lib/python2.7/site-packages/django/template/response.py" in rendered_content
      82.         content = template.render(context)
    File ".../.virtualenvs/env1/lib/python2.7/site-packages/django/template/base.py" in render
      140.             return self._render(context)
    File ".../.virtualenvs/env1/lib/python2.7/site-packages/django/template/base.py" in _render
      134.         return self.nodelist.render(context)
    File ".../.virtualenvs/env1/lib/python2.7/site-packages/django/template/base.py" in render
      830.                 bit = self.render_node(node, context)
    File ".../.virtualenvs/env1/lib/python2.7/site-packages/django/template/debug.py" in render_node
      74.             return node.render(context)
    File ".../.virtualenvs/env1/lib/python2.7/site-packages/django/template/loader_tags.py" in render
      124.         return compiled_parent._render(context)
    File ".../.virtualenvs/env1/lib/python2.7/site-packages/django/template/base.py" in _render
      134.         return self.nodelist.render(context)
    File ".../.virtualenvs/env1/lib/python2.7/site-packages/django/template/base.py" in render
      830.                 bit = self.render_node(node, context)
    File ".../.virtualenvs/env1/lib/python2.7/site-packages/django/template/debug.py" in render_node
      74.             return node.render(context)
    File ".../.virtualenvs/env1/lib/python2.7/site-packages/django/template/loader_tags.py" in render
      63.             result = block.nodelist.render(context)
    File ".../.virtualenvs/env1/lib/python2.7/site-packages/django/template/base.py" in render
      830.                 bit = self.render_node(node, context)
    File ".../.virtualenvs/env1/lib/python2.7/site-packages/django/template/debug.py" in render_node
      74.             return node.render(context)
    File ".../.virtualenvs/env1/lib/python2.7/site-packages/django/template/defaulttags.py" in render
      284.                 return nodelist.render(context)
    File ".../.virtualenvs/env1/lib/python2.7/site-packages/django/template/base.py" in render
      830.                 bit = self.render_node(node, context)
    File ".../.virtualenvs/env1/lib/python2.7/site-packages/django/template/debug.py" in render_node
      74.             return node.render(context)
    File ".../.virtualenvs/env1/lib/python2.7/site-packages/django/template/defaulttags.py" in render
      188.                         nodelist.append(node.render(context))
    File ".../.virtualenvs/env1/lib/python2.7/site-packages/django/template/defaulttags.py" in render
      424.                         raise e
    
    Exception Type: NoReverseMatch at /
    Exception Value: Reverse for 'detail' with arguments '()' and keyword arguments '{u'slug': u'third-post'}' not found.
    
    环境:
    请求方法:获取
    请求URL:http://127.0.0.1:8000/
    Django版本:1.5
    Python版本:2.7.2
    已安装的应用程序:
    (“django.contrib.auth”,
    “django.contrib.contenttypes”,
    “django.contrib.sessions”,
    “django.contrib.sites”,
    “django.contrib.messages”,
    “django.contrib.staticfiles”,
    “django.contrib.admin”,
    “django.contrib.admindocs”,
    “南方”,
    “博客应用程序”)
    已安装的中间件:
    ('django.middleware.common.CommonMiddleware',
    “django.contrib.sessions.middleware.SessionMiddleware”,
    “django.middleware.csrf.CsrfViewMiddleware”,
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware')
    模板错误:
    在template…/Development/Python/Django/dev/blog/blogapp/templates/blogapp/default.html中,第11行出现错误
    对于参数为“()”且关键字参数为“{u'slug:u'third-post'}”的“detail”,则相反。
    1:{%extends“blogapp/base.html”%}
    2 : 
    3:{%block title%}博客帖子{%endblock%}
    4 : 
    5:{%block body%}
    6 : 
    7:{%if-latest_posts%}
    8:最近5篇博客文章

    9:
      10:{p在最近的_帖子中占%} 11:
    • 12:{%endfor%} 13:
    14:{%else%} 15:没有发布博客帖子

    16:{%endif%} 17 : 18:{%endblock%} 19 : 20 : 回溯: get\u响应中的文件“...virtualenvs/env1/lib/python2.7/site packages/django/core/handlers/base.py” 140response=response.render() render中的文件“...virtualenvs/env1/lib/python2.7/site packages/django/template/response.py” 105self.content=自渲染内容 呈现内容中的文件“...virtualenvs/env1/lib/python2.7/site packages/django/template/response.py” 82content=template.render(上下文) render中的文件“...virtualenvs/env1/lib/python2.7/site packages/django/template/base.py” 140返回self.\u呈现(上下文) 文件“...virtualenvs/env1/lib/python2.7/site packages/django/template/base.py”在_render中 134返回self.nodelist.render(上下文) render中的文件“...virtualenvs/env1/lib/python2.7/site packages/django/template/base.py” 830bit=self.render_节点(节点,上下文) render_节点中的文件“...virtualenvs/env1/lib/python2.7/site packages/django/template/debug.py” 74返回node.render(上下文) render中的文件“...virtualenvs/env1/lib/python2.7/site packages/django/template/loader_tags.py” 124返回编译的\u父对象。\u呈现(上下文) 文件“...virtualenvs/env1/lib/python2.7/site packages/django/template/base.py”在_render中 134返回self.nodelist.render(上下文) render中的文件“...virtualenvs/env1/lib/python2.7/site packages/django/template/base.py” 830bit=self.render_节点(节点,上下文) render_节点中的文件“...virtualenvs/env1/lib/python2.7/site packages/django/template/debug.py” 74返回node.render(上下文) render中的文件“...virtualenvs/env1/lib/python2.7/site packages/django/template/loader_tags.py” 63结果=block.nodelist.render(上下文) render中的文件“...virtualenvs/env1/lib/python2.7/site packages/django/template/base.py” 830bit=self.render_节点(节点,上下文) render_节点中的文件“...virtualenvs/env1/lib/python2.7/site packages/django/template/debug.py” 74返回node.render(上下文) render中的文件“...virtualenvs/env1/lib/python2.7/site packages/django/template/defaulttags.py” 284返回nodelist.render(上下文) render中的文件“...virtualenvs/env1/lib/python2.7/site packages/django/template/base.py” 830bit=self.render_节点(节点,上下文) render_节点中的文件“...virtualenvs/env1/lib/python2.7/site packages/django/template/debug.py” 74返回node.render(上下文) render中的文件“...virtualenvs/env1/lib/python2.7/site packages/django/template/defaulttags.py” 188nodelist.append(node.render(上下文)) render中的文件“...virtualenvs/env1/lib/python2.7/site packages/django/template/defaulttags.py” 424提高e 异常类型:NoReverseMatch位于/ 异常值:与参数“()”和关键字参数“{u'slug':u'third-post'}”相反的'detail'未找到。
    因为您的url代码不支持此字符“-”,所以它必须是

        url(r'^post/(?P<slug>[\w\-]+)/$',
            PostDetailView.as_view(),
            name = 'detail'
        ),
    
    url(r'^post/(?P[\w\-]+)/$”,
    PostDetailView.as_view(),
    名称='detail'
    ),
    
    尝试使用
    {%url'blog:detail'slug=p.slug%}
    我尝试了{%url'blog:detail'slug=p.slug%}它不起作用。相同的错误您是否使用debug视图检查p.slug的内容?是否可以发布回溯?url将显示为
    post/123/
    。如何摆脱最后的
    /
    @アレックス: 在美元符号前加一个问号,使最后的斜杠可选。/?$而不是/$
        url(r'^post/(?P<slug>[\w\-]+)/$',
            PostDetailView.as_view(),
            name = 'detail'
        ),