django-categories中的get_absolute_url

时间:2013-08-13 18:20:25

标签: python django-models categories

我想知道这种方法必须要努力,因为我已经尝试实施,但我不能。 其实我已经尝试通过

进入shell了
python manage.py shell
c=Category.objects.get(pk = 3)
c.get_absolute_url
#I got <bound method Category.get_absolute_url of <Category: Category2>>
c.get_absolute_url()
#It Doesn't work

我想在名为Article的另一个模型中实现它,它是Category模型的外键

我的意图是在文章中有一个方法,如

def get_abs_url(self):
   c=Category.objects.get(pk=self.category)
   return c.get_absolute_url() + '/' + self.slug

像这样的东西

2 个答案:

答案 0 :(得分:2)

也许您可以提供有关模型的更多信息以及您要实现的目标。这样的事情可能会有所帮助:

models.py

class Article(models.Model):
    category = models.ForeignKey(Category, related_name='article')
    ...

在视图中返回查询集的地方:

def get_context_data(self, **kwargs):
    context = super(ArticleView, self).get_context_data(**kwargs)
    context['articles'] = Article.objects.all().select_related('category')
    return context

在模板中:

{% for article in articles %}
    {% for category in article.category %}
        {{ category.get_absolute_url }}/{{ category.slug }} # this will return a string: abs_url/slug
    {% endfor %}
{% endfor %}    

在此处阅读select_related:https://docs.djangoproject.com/en/dev/ref/models/querysets/#select-related

您还可以查看实施经理:https://docs.djangoproject.com/en/dev/topics/db/managers/#django.db.models.Manager

答案 1 :(得分:0)

最后,我克服了这个问题抛出以下解决方案,首先,我的意图一直是得到这样的东西 /c/slug_category_parent/slug_first_children/.../last_children。 我已经解决了在settings.py中抛出此解决方案的问题:

cat_url= lambda c: cat_url(c.parent) + '/' +c.slug if c.parent else '/c/'+ c.sl
ABSOLUTE_URL_OVERRIDES = {
    'categories.category': lambda c: cat_url(c),
}