Django反向查找

时间:2014-01-25 20:37:57

标签: django

我有一个包含年/月/日/ slug格式的网址结构

示例:2014 / Jan / 25 / Another_blog /

在我的模型中,我有一个get_absolute_url函数


def get_absolute_url(self):
    # Format date to yyyy/mon/dd format
    datestr = format_date(self.publication_date,'%Y/%b/%d')
    slugstr = datestr + '/' + self.machine_name
    return (str(slugstr))

网址的条目是


url(r'^(?P\d{4})/(?P[-\w]+)/(?P\d{1,2})/(?P[a-zA-Z0-9_-]+)/$',
        PostDetails.as_view(), name='postdetails'),

在我看来,我正在用帮助者

返回记录

# Helper
def get_post(self, slug):
    return Post.objects.get(machine_name=slug)

使用{{post.get_absolute_url}}在模板中使用它时效果很好

我想做的是使用reverse()

进行工作测试

def test_post_detail_view(self):
    a = self.create_post()
    url = reverse('postdetails')
    resp = self.client.get(url)
    self.assertEqual(resp.status_code, 200)

我试过了:

url = reverse(' postdetails',args = [a.machine_name])

url = reverse(' postdetails',kwargs = {' slug':a.machine_name})

但是我知道我没有正确的反向逻辑。

测试输出为:

"论证'%s'没找到。" %(lookup_view_s,args,kwargs)) NoReverseMatch:反向' postdetails'带参数

任何建议或指示都将受到赞赏..

1 个答案:

答案 0 :(得分:1)

你需要给出所有四个args,例如

reverse("postdetails", args=('2014', 'Jan', '25', a.machine_name))