Django永久链接不适用于博客应用程序

时间:2012-03-21 20:15:48

标签: django django-models django-urls permalinks

我试图让我的博客文章返回一个固定链接,以便我可以将它们ping到博客直播,但是当我调用我创建的永久链接函数时,总会出现错误。我从googleing / stackoverflowing中找到的所有内容都会出现一个错误或其他错误!

我回来的最常见错误是:

Reverse for 'viewpost' with arguments '()' and keyword arguments '{'slug': u'site-redesign'}' not found.

我的错误模型:

class BlogPost(models.Model):
    author = models.ForeignKey(User, related_name='posts')
    title = models.CharField(max_length=200)
    slug = models.SlugField(max_length=200)
    ...
    @models.permalink
    def get_absolute_url(self):
        return ('viewpost', (), { 'slug':self.slug})

我的urls.py:

urlpatterns = patterns('blog.views',
    ...
    (r'^post/(?P<page_slug>[a-zA-Z0-9-]+)/$', 'viewpost'),
    ...
)

如果我打印:reverse('blogPost',kwargs = {'slug':self.slug})我得到了正确的网址。

我做错了什么。

我通过以下方式调用该函数:

signals.post_save.connect(
    ping_directories(content_attr = 'body', url_attr = 'get_absolute_url'), sender = BlogPost, weak = False)

如果您需要更多信息,请告诉我。

- 编辑更多观点

#pages

(r'^post/(?P<page_slug>[a-zA-Z0-9-]+)/$', 'viewpost'),

(r'^category/(?P<category_slug>[a-zA-Z0-9-]+)/page/(?P<page_number>[0-9]+)/$', 'viewcategories'),
(r'^category/$', 'listcategories'),

(r'^tag/(?P<tag_slug>[a-zA-Z0-9-]+)/page/(?P<page_number>[0-9]+)/$', 'viewtag'),
(r'^tag/$', 'listtags'),

(r'^category/(?P<category_slug>[a-zA-Z0-9-]+)/$', 'viewcategories'),
(r'^tag/(?P<tag_slug>[a-zA-Z0-9-]+)/$', 'viewtag'),
(r'^comments/', include('django.contrib.comments.urls')),

(r'^page/(?P<page_number>[0-9]+)/$', 'index'),
(r'^$', 'index'),
)

和观点:

def viewpost(request, page_slug):
    blog_post = get_object_or_404(BlogPost, post_status = 'published', slug=page_slug)
    path = settings.BLOG_PATH

    return render_to_response("blog/detail.html", { "post": blog_post, "path":path}, context_instance=RequestContext(request))

2 个答案:

答案 0 :(得分:1)

你已经在url中调用了kwargs page_slug并在你的permlink中调用了slug

答案 1 :(得分:0)

事实证明,调用我的get_absolute_url的方法也需要一个额外的回调,所以我被误导了。为混乱道歉!违规代码:

signals.post_save.connect(ping_directories(content_attr = 'body', url_attr = 'get_absolute_url', feed_url_fun=lambda x: 'http://example.com/feed/address/here/'), sender = BlogPost, weak = False)