带有多个args的get_absolute_url()

时间:2013-04-28 11:26:49

标签: python django python-2.7

models.pyurls.pyviews.py

我正在尝试为get_absolute_url()类设置Entry函数,但失败了。我已成功为Category类创建了这样一个函数,只有一个arg,但我仍坚持使用Entry类中的多个args。

目前,点击

<a href="/blog/{{ entry.get_absolute_url }}/">{{ entry.title }}</a>`

链接,如我的索引页面上所示,仅返回以下网址:

http://127.0.0.1:8000/blog//

我最初使用的是没有反向的退货:

def get_absolute_url(self):
    return "/%s/%s/%s/" % (self.pub_date.year, self.pub_date.month, self.slug)

但是,虽然它从index.html开始使用前面提到的href,但是从其他页面(即category.html)开始工作,这会返回一个URL,并附加在当前URL上,包括{{{ 1}}类。切换到反向修复了Category的此问题,但由于多个参数,我无法使其适用于Category

请根据需要请求任何其他数据。


编辑嗯,我已成功使用(原始代码):

Entry

将category.html的def get_absolute_url(self): return "%s/%s/%s/%s" % (self.pub_date.year, self.pub_date.month, self.pub_date.day, self.slug) 更改为:

href

即。我添加了根<a href="http://127.0.0.1:8000/blog/{{ entry.get_absolute_url }}">{{ entry.title }}</a> ,但我仍然无法使用http://127.0.0.1:8000 ...我已尝试reverse()args,其他一些事情......我确实不确定kwargs对常规reverse()的不同之处。它做了不同的事情,就像之前我使用return而没有根一样,从"blog/{{ category.get_absolute_url }}"切换到return使它工作;虽然我现在设法让它只与return reverse()一起使用,但是将{@ 1}}添加到return,就像我使用href一样。

1 个答案:

答案 0 :(得分:0)

您可以反向使用kwargs。类似的东西:

假设您的博客详细信息的网址格式如下:

url(r'^blog/(?P<year>)/(?P<month>)/(?P<slug>[-\w]+)/$', 'details', name='blog_details')

您可以将get_absolute_url写为:

def get_absolute_url(self):
    return reverse('blog_details', kwargs={'year': self.pub_date.year,
                                     'month': self.pub_date.month,
                                     'slug': self.slug})

在您使用时在模板中使用它。