我开始使用 Django-MPTT 应用程序在我的 Django 站点页面上获取基于树的方法。
对于前。我有带有子页面的页面:
Trance:
- 声音恍惚(子页)
- Hard Trance(子页面)
Breaks:
- Atmo Breaks(子页面)
- 渐进式休息(子页面)
我如何从 urls.py 访问它们?
什么模式会有帮助?
我是否需要在模型中存储 Full_path 还是可以通过 url 模式来完成?
我假设你的意思是你想要做这样的网址:
/trance/
/trance/vocal-trance/
/trance/hard-trace/
/breaks/
/breaks/atmo-breaks/
/breaks/progressive-breaks/
如果是这样,最好将 url 片段存储在模型中。就像是:
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)
然后添加 URL 模式:
(r'^pages/(?P<page_url>[\w\d_/-]+)/$', 'pages.views.show_page'),
在您看来,您只需获取正确的页面即可:
def show_page(request, page_url=None):
page = get_object_or_404(Page, url=page_url)
...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)