Django 管理界面中的断链

1 投票
1 回答
695 浏览
提问于 2025-04-16 00:12

我现在正在阅读《实用Django项目》这本书,在Django的管理界面中,有一个选项叫“在网站上查看”,可以用来查看输入的信息。

但是在看完书的第五章后,我开始尝试修改管理界面,发现点击这个链接时,我的分类应用并没有正常工作,因为它没有把“weblog”加到网址上,所以显示的链接是这样的:

http://127.0.0.1:8000/categories/test-cat

而它应该是这样的……

http://127.0.0.1:8000/weblog/categories/test-cat

不过在我的条目模型中,这个链接是完全正常的。所以我想看看条目应用哪里做得对,想找出分类应用的问题所在。

我已经找了大约两个小时,但还是没能找到Django是怎么处理这个的。我甚至从网上复制了源代码,虽然有些部分似乎缺失了。

我的get_absolute_url()方法是这样的:

def get_absolute_url(self):
    return "/categories/%s/" % self.slug

我修改成了:

def get_absolute_url(self):
    return "/weblog/categories/%s/" % self.slug

这样就解决了问题。

我现在的问题是,为什么条目应用不需要这样处理,而分类应用却需要呢?

这是我从Entry类中的代码:

def get_absolute_url(self):
    return ('coltrane_entry_detail', (), { 'year': self.pub_date.strftime("%Y"),
                                        'month': self.pub_date.strftime("%b").lower(),
                                       'day': self.pub_date.strftime("%d"),
                                       'slug': self.slug })
get_absolute_url = models.permalink(get_absolute_url)

1 个回答

1

它使用了模型中的 get_absolute_url() 方法。把这个改一下,应该就能正常工作了 :)

[编辑] 对于编辑过的问题。你在分类模型中使用了一个固定的链接,而在条目模型中使用了永久链接。我建议你在这两个地方都使用永久链接,这样就能解决问题。

这里有关于如何使用它的文档: http://docs.djangoproject.com/en/dev/ref/models/instances/#the-permalink-decorator

撰写回答