Django NoReverseMatch错误在博客教程修改 [英] Django NoReverseMatch Error in blog tutorial modification

查看:86
本文介绍了Django NoReverseMatch错误在博客教程修改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚在Django博客教程中找到:博客教程



我现在正在尝试添加一个功能,可以计算博客帖子收到的观看次数。为此,我将以下内容添加到views.py(请注意,在教程中,views.py完全为空,因为它使用Django通用视图):

 code> def detail_view(request,object_id):
object = Post.objects.filter(id = object_id)
object.update(counter = F('counter')+ 1)

return render_to_response('posts / post_detail.html',{'object':object},context_instance = RequestContext(request))

不知道我是否正确执行了render_to_response。我的urls.py现在是:

 从模型导入Post 
queryset = {'queryset':Post.objects。 order_by(' - pub_date')}
urlpatterns = patterns('',
url('^ $','django.views.generic.list_detail.object_list',queryset,name =posts) ,
url('^(?P< object_id> \d +)/ $','posts.views.detail_view',name =post)
pre>

我的post_list.html具有以下代码,创建一个指向post_detail.html的链接:

 < a href = {%url post object.id%}> {{object.title}}< / a> 

完整的错误是:

 >异常值:
在呈现时捕获NoReverseMatch:反向'post',带参数'('','')和关键字参数'{}'找不到

追溯:

>环境:


请求方法:GET
请求URL:localhost:8000/1 /

Django版本:1.3
Pytho n版本:2.6.1
已安装的应用程序:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions'
'django.contrib.sad',
'django.contrib.messages',
'django.contrib.comments',
'django.contrib.admin',
'Blog.posts',
'Blog.categories']
安装的中间件:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions .middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.csrf.CsrfResponseMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware'
'django.contrib.messages.middleware.MessageMiddleware')


模板错误:
在模板/用户/ kevin / PycharmProjects / Blog / templates / posts / _post.html,错误在第3行
在呈现时捕获NoReverseMatch:使用参数'('',)'和关键字参数反转'post' '{}' 未找到。
1:< div id =object _ {{object.id}}>


2:< h2>


3:< a href = {%url post object.id%}> {{object.title}}< / a>


4:< small> {{object.pub_date | timesince}}之前< / small>


5:< / h2>


6:{{object.body}}


7:< / div>

追溯:
文件/Library/Python/2.6/site-packages/django/core/handlers/base.pyin get_response
111. response = callback(request ,* callback_args,** callback_kwargs)
文件/Users/kevin/PycharmProjects/Blog/posts/views.pyin detail_view
12. return render_to_response('posts / post_detail.html',{'对象':object},context_instance = RequestContext(request))
在render_to_response
中的文件/Library/Python/2.6/site-packages/django/shortcuts/__init__.py20.返回HttpResponse(loader文件/Library/Python/2.6/site-packages/django/template/loader.py在render_to_string中
188.返回t(*)args,** kwargs),** httpresponse_kwargs .endder(context_instance)
文件/Library/Python/2.6/site-packages/django/template/base.py在render
123. return self._render(context)
文件_render
117中的/Library/Python/2.6/site-packages/django/template/base.py。 return self.nodelist.render(context)
render
中的文件/Library/Python/2.6/site-packages/django/template/base.py744. bits.append(self.render_node(节点,上下文))
render_node
中的文件/Library/Python/2.6/site-packages/django/template/debug.py73. result = node.render(context)
文件/Library/Python/2.6/site-packages/django/template/loader_tags.py在render
127. return compiled_pa​​rent._render(context)
文件/Library/Python/2.6/site _render
中的-packages / django / template / base.py117. return self.nodelist.render(context)
文件/Library/Python/2.6/site-packages/django/template/base .pyin render
744. bits.append(self.render_node(node,context))
文件/Library/Python/2.6/site-packages/django/template/debug.py在render_node
73. result = node.render(context)
文件/Library/Python/2.6/site-packages/django/template/loader_tags.py在render
result = block.nodelist.render(context)
文件/Library/Python/2.6/site-packages/django/template/base.py在render
744. bits.append(self .render_node(node,context))
render_node
中的文件/Library/Python/2.6/site-packages/django/template/debug.py73. result = node.render(context)
文件/Library/Python/2.6/site-packages/django/template/loader_tags.py在render
159. return self.render_template(self.template,context)
文件/图书馆/ Python / 2.6 / site-packages / django / template / loader_tags.pyin render_template
141. output = template.render(context)
文件/Library/Python/2.6/site-packages /django/template/base.py在render
123. return self._render(context)
文件/Library/Python/2.6/site-packages/django/template/base.py中_render
117. return self.nodelist.render(context)
文件/Library/Python/2.6/site-packages/django/template/base.py在render
744. bits.append(self.render_node(node,context))
render_node $ b中的/Library/Python/2.6/site-packages/django/template/debug.py文件$ b 73. result = node.render(context)
文件/Library/Python/2.6/site-packages/django/template/defaulttags.py在render
450. raise e

异常类型:/ 1 /
中的TemplateSyntaxError异常值:在渲染时捕获NoReverseMatch:反转为'post',带有参数'('',)'和关键字参数'{}'未找到。

我一直在试图弄清楚几个小时有什么问题,但还没有找到答案。我也在SO.com上看了一堆东西,但还是没有运气。



您的帮助非常感谢。



谢谢!

解决方案

尝试:



< p $ p> < a href ={%url post object_id = object.id%}> {{object.title}}< / a>

您需要提供参数的名称才能使反向快乐。另外,你应该引用URL。



如果您的URL条目为:

  url('^(\d +)/ $',' posts.views.detail_view',name =post)

但这不是推荐的做法



此外,您似乎应该这样做:

  ...,{'object':object [0]},... 

code> render_to_response 调用。 过滤器只返回一个修改后的查询集,可以在更新中正常工作,但在模板中,您可以将其视为对象,因此您应该将其放在上下文中时将其解析为对象。


I just did the Django blog tutorial found here: Blog tutorial

I am now trying to add a functionality that will count the number of views a blog post has received. To do that I added the following to views.py (note that views.py is completely empty in the tutorial because it uses Django generic views):

def detail_view(request, object_id):
object = Post.objects.filter(id=object_id)
object.update(counter = F('counter') + 1)

return render_to_response('posts/post_detail.html', {'object':object}, context_instance=RequestContext(request))

Not sure if I did that render_to_response correctly. My urls.py is now:

from models import Post
queryset = {'queryset': Post.objects.order_by('-pub_date')}
urlpatterns = patterns('',
    url('^$', 'django.views.generic.list_detail.object_list', queryset, name="posts"),
    url('^(?P<object_id>\d+)/$', 'posts.views.detail_view', name="post")

My post_list.html has the following code that creates a link to post_detail.html:

<a href={% url post object.id %}>{{ object.title }}</a>

And the full error is:

> Exception Value:  
Caught NoReverseMatch while rendering: Reverse for 'post' with arguments '('',)' and keyword arguments '{}' not found.

Traceback:

> Environment:


Request Method: GET
Request URL: localhost:8000/1/

Django Version: 1.3
Python Version: 2.6.1
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.comments',
 'django.contrib.admin',
 'Blog.posts',
 'Blog.categories']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.middleware.csrf.CsrfResponseMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Template error:
In template /Users/kevin/PycharmProjects/Blog/templates/posts/_post.html, error at line 3
   Caught NoReverseMatch while rendering: Reverse for 'post' with arguments '('',)' and keyword arguments '{}' not found.
   1 : <div id="object_{{ object.id }}">


   2 : <h2>


   3 :     <a href= {% url post object.id %} >{{ object.title }}</a>


   4 :     <small>{{ object.pub_date|timesince }} ago</small>


   5 :     </h2>


   6 :     {{ object.body }}


   7 : </div>

Traceback:
File "/Library/Python/2.6/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/Users/kevin/PycharmProjects/Blog/posts/views.py" in detail_view
  12.     return render_to_response('posts/post_detail.html', {'object':object}, context_instance=RequestContext(request))
File "/Library/Python/2.6/site-packages/django/shortcuts/__init__.py" in render_to_response
  20.     return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/Library/Python/2.6/site-packages/django/template/loader.py" in render_to_string
  188.         return t.render(context_instance)
File "/Library/Python/2.6/site-packages/django/template/base.py" in render
  123.             return self._render(context)
File "/Library/Python/2.6/site-packages/django/template/base.py" in _render
  117.         return self.nodelist.render(context)
File "/Library/Python/2.6/site-packages/django/template/base.py" in render
  744.                 bits.append(self.render_node(node, context))
File "/Library/Python/2.6/site-packages/django/template/debug.py" in render_node
  73.             result = node.render(context)
File "/Library/Python/2.6/site-packages/django/template/loader_tags.py" in render
  127.         return compiled_parent._render(context)
File "/Library/Python/2.6/site-packages/django/template/base.py" in _render
  117.         return self.nodelist.render(context)
File "/Library/Python/2.6/site-packages/django/template/base.py" in render
  744.                 bits.append(self.render_node(node, context))
File "/Library/Python/2.6/site-packages/django/template/debug.py" in render_node
  73.             result = node.render(context)
File "/Library/Python/2.6/site-packages/django/template/loader_tags.py" in render
  64.             result = block.nodelist.render(context)
File "/Library/Python/2.6/site-packages/django/template/base.py" in render
  744.                 bits.append(self.render_node(node, context))
File "/Library/Python/2.6/site-packages/django/template/debug.py" in render_node
  73.             result = node.render(context)
File "/Library/Python/2.6/site-packages/django/template/loader_tags.py" in render
  159.         return self.render_template(self.template, context)
File "/Library/Python/2.6/site-packages/django/template/loader_tags.py" in render_template
  141.         output = template.render(context)
File "/Library/Python/2.6/site-packages/django/template/base.py" in render
  123.             return self._render(context)
File "/Library/Python/2.6/site-packages/django/template/base.py" in _render
  117.         return self.nodelist.render(context)
File "/Library/Python/2.6/site-packages/django/template/base.py" in render
  744.                 bits.append(self.render_node(node, context))
File "/Library/Python/2.6/site-packages/django/template/debug.py" in render_node
  73.             result = node.render(context)
File "/Library/Python/2.6/site-packages/django/template/defaulttags.py" in render
  450.                         raise e

Exception Type: TemplateSyntaxError at /1/
Exception Value: Caught NoReverseMatch while rendering: Reverse for 'post' with arguments '('',)' and keyword arguments '{}' not found.

I have been trying to figure out what's wrong for hours, but have not found an answer. I've read a bunch of stuff here on SO.com as well, but still no luck.

Your help is much appreciated.

Thanks!

解决方案

Try:

<a href="{% url post object_id=object.id %}">{{ object.title }}</a>

You need to provide the name for the parameter to make the reverse happy. Also, you should quote the URL.

P.S. Your original code would have worked if your URL entry was:

url('^(\d+)/$', 'posts.views.detail_view', name="post")

but that's not the recommended way to do it.

Also, it looks like you should do:

... , {'object':object[0]}, ...

in your render_to_response call. filter just returns a modified queryset, which works fine with update but in your template you treat it like an object, so you should resolve it to an object when putting it in the context.

这篇关于Django NoReverseMatch错误在博客教程修改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆