【问题标题】:get_absolute_url() with multiple args具有多个参数的 get_absolute_url()
【发布时间】:2013-04-28 11:26:49
【问题描述】:

models.pyurls.pyviews.py

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

目前,点击一个

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

链接,显示在我的索引页面上,只返回下面的 url:

http://127.0.0.1:8000/blog//

我最初使用没有反向的 return 是这样的:

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 上,包括 Category 类。切换到反向解决了 Category 的这个问题,但由于多个参数,我无法让它为 Entry 工作。

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


编辑:好吧,我已经设法使它与(原始代码)一起工作:

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

通过将 category.html 中的 href 更改为:

<a href="http://127.0.0.1:8000/blog/{{ entry.get_absolute_url }}">{{ entry.title }}</a>

即我添加了根http://127.0.0.1:8000,但我仍然无法让它与reverse() 一起使用...我已经尝试过argskwargs、其他一些东西...我实际上还不确定reverse() 的作用与普通的 return 不同。它做了一些不同的事情,就像以前我在没有 root 的情况下使用 "blog/{{ category.get_absolute_url }}" 时一样,从 return 切换到 return reverse() 使它工作;虽然我现在已经设法让它与return 一起工作,但通过将根添加到href 就像我对Entry 所做的那样。

【问题讨论】:

    标签: python django python-2.7


    【解决方案1】:

    您可以将kwargs 与反向使用。比如:

    假设您的博客详细信息的 url 模式如下:

    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})
    

    并在你使用的模板中使用它。

    【讨论】:

    • 什么不起作用?您是否更改了您的 get_absolut_url 以将 reverese 与 kwargs 一起使用?
    • 是的,我完全按照你说的做了。
    • 你的正则表达式不完全正确:应该是(?P&lt;year&gt;\d{1,2})/(?P&lt;month&gt;\d{1,2})...
    • 嘿,好吧,我也试过了 Daniel =D 我按照他的说法先试了一下,然后按照你的建议进行了一些调整,但也没有用。 >_
    猜你喜欢
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 2016-07-21
    • 2011-04-15
    • 2011-08-01
    • 1970-01-01
    • 2021-08-01
    相关资源
    最近更新 更多