Django-MPTT子页面的完整路径如何制作? [英] Django-MPTT full path to child pages how to make?
本文介绍了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屋!
查看全文