Django-MPTT子页面的完整路径如何制作? [英] Django-MPTT full path to child pages how to make?

查看:233
本文介绍了Django-MPTT子页面的完整路径如何制作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开始使用Django-MPTT应用程序在Django站点页面上获取基于树的方法.

I'm start using Django-MPTT app to get a tree-based approach on my Django-site pages.

例如我的页面带有子页面:

For ex. I have pages with sub pages:

Tr:

  • 发声Tra(子页面)
  • 硬Tra(子页面)

断裂:

  • Atmo Breaks(子页面)
  • 渐进式休息(子页面)

如何从urls.py访问它们? 什么模式会有所帮助? 我需要在模型中存储Full_path还是可以通过url模式来完成?

How can I get access to them from urls.py? What pattern will help? Do I need to store Full_path in model or it can be done via url pattern?

推荐答案

我假设您是说要执行以下URL:

I assume you mean you want to do URLs like this:

/trance/
/trance/vocal-trance/
/trance/hard-trace/
/breaks/
/breaks/atmo-breaks/
/breaks/progressive-breaks/

如果是这样,最好将url片段存储在模型中.像这样:

If so, it's probably best to store the url fragment in your model. Something like:

from mptt.models import MPTTModel
from django.db import models
from django.template.defaultfilters import slugify

class Page(MPTTModel):
    name = models.CharField(max_length=50)
    slug = models.CharField(max_length=50,null=True)
    url = models.CharField(max_length=255,null=True)

    def save(self, *args, **kwargs)
        if self.slug is None:
            # create a slug that's unique to siblings
            slug = slugify(self.name)
            self.slug = slug
            siblings = self.get_siblings()
            i = 1
            while siblings.filter(slug=self.slug).exists():
                i += 1
                self.slug = slug + '-%d' % i

            # now create a URL based on parent's url + slug
            if self.parent:
                self.url = '%s/%s' % (self.parent.url, self.slug)
            else:
                self.url = self.slug
        super(Page, self).save(*args, **kwargs)

然后添加一个网址格式:

Then add a URL pattern:

(r'^pages/(?P<page_url>[\w\d_/-]+)/$', 'pages.views.show_page'),

在您看来,您只需获取正确的页面即可

And in your view you can just fetch the right page:

def show_page(request, page_url=None):
    page = get_object_or_404(Page, url=page_url)
    ...

这篇关于Django-MPTT子页面的完整路径如何制作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆