首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django新手- NoReverseMatch错误

Django新手- NoReverseMatch错误
EN

Stack Overflow用户
提问于 2009-09-12 12:41:36
回答 1查看 5.9K关注 0票数 2

刚开始使用Django,但遇到了一点麻烦--我决定尝试编写一个简单的博客引擎,同时引用django-基本应用程序库。

在blog/urls.py中,我有这样的条目,可以按日期映射到实际的帖子,例如blog/2009/aug/01/test-post

代码语言:javascript
运行
复制
urlpatterns = patterns('',
    url(r'^(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{1,2})/(?P<slug>[-\w]+)/$', 'blog.views.post_detail'),
    ...

以及提供帖子的视图:

代码语言:javascript
运行
复制
def post_detail(request, slug, year, month, day, **kwargs):
return date_based.object_detail(
    request,
    year = year,
    month = month,
    day = day,
    date_field = 'created_at',
    slug = slug,
    queryset = Content.objects.filter(published=True),
    **kwargs
)

在这个模型中,我实现了get_absolute_url,这样我就可以点击文章的标题来查看它了:

代码语言:javascript
运行
复制
class Content(models.Model):
    ...
@permalink
def get_absolute_url(self):
    return ('blog.views.post_detail', (), {
        'slug': self.slug,
        'year': self.created_at.year,
        'month': self.created_at.strftime('%b').lower(),
        'day': self.created_at.day
    })

最后,在主页的帖子列表中,应该在标题中插入permalink:

代码语言:javascript
运行
复制
{% for content in object_list %}
<div class="content_list">
<h3 class="content_title"><a href="{{ content.get_absolute_url }}">{{ content.title }}</a></h3>
<p class="content_date">{{ content.published_at|date:"Y F d"}}</p>
<p class="content_body">{{ content.body }}</p>
<p class="content_footer">updated by {{ content.author }} at {{ content.updated_at|timesince }} ago</p>
</div>
{% endfor %}

但是,链接显示为空,当我试图从django shell调用content.get_absolute_url()时,会抛出错误:

代码语言:javascript
运行
复制
NoReverseMatch: Reverse for '<function post_detail at 0xa3d59cc>' with arguments '()' and keyword arguments '{'year': 2009, 'slug': u'another_test', 'day': 15, 'month': 'aug'}' not found.

编辑:原来是Python命名空间问题(见下文)。但是无论如何,我的urls.py是否如上面所示的不正确?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-09-12 16:23:53

谷歌搜索其他菜鸟Django教程,并得到了将所有URL放到父文件夹urls.py中的想法,这似乎解决了问题。)最后,我的主要urls.py现在有:

代码语言:javascript
运行
复制
from djangoblog.blog import views
urlpatterns = patterns('',

    (r'^blog/(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{1,2})/(?P<slug>[-\w]+)/$',
    views.post_detail),
    (r'^blog/(?P<year>\d{4})/(?P<month>\w{3})/(?P<day>\d{1,2})/$',
    views.post_archive_day),
    ...

编辑:经过2天的临时黑客攻击,我现在明白URLconfs + django的观点要好得多,幸运的是。)我将模式移回blog/ urls.py,去掉了所有基于日期的自定义视图,转而从urls.py调用它们,并为需要@permalinked的项目正确命名模式。

具有命名模式的urls.py

代码语言:javascript
运行
复制
from blog import views
...
(r'(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{1,2})/(?P<slug>[-\w]+)/$',
    'object_detail', dict(info_dict, slug_field='slug', month_format='%m'),
    'post_detail'),
...
(r'category/(?P<slug>[-\w]+)/$', views.category_detail),

models.py:

代码语言:javascript
运行
复制
class Post:
    @permalink
    def get_absolute_url(self):
    return ('post_detail', (), {
                  ....

class Category:
    @permalink
def get_absolute_url(self):
    return ('blog.views.category_detail', (), {'slug': self.slug})
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1415026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档