我有一个列出项目及其详细页面的项目组合应用程序。每个项目通常都有相同的信息(画廊,关于等),但有时用户可能想要为特别大的项目添加额外信息,例如可能是关于该页面资金的额外页面。为特定应用程序扩展flatpages
是否有可能在我的投资组合应用程序中创建一个覆盖的页面模型,该模型会强制在该应用程序中创建的任何页面始终以/ portfolio/project-name/flat-page开头。然后,我可以简单地将链接传递给与项目相关联的页面,以便用户生成的任何简单页面将自动链接到项目页面。
编辑
我把它稍微现在的工作
所以我覆盖描述在我的投资组合应用程序中的简单页面模式:
from django.contrib.flatpages.models import FlatPage
from project import Project
from django.db import models
from django.contrib.sites.models import Site
class ProjectFlatPage(FlatPage):
prefix = models.CharField(max_length=100)
project = models.ForeignKey(Project)
,让我这个简单页面有关联特定的项目,
然后我覆盖保存方法写所有额外的(需要进行一些清理),当用户保存的形成:
def save(self, force_insert=False, force_update=False):
self.url = u"%s%s/" % (self.project.get_absolute_url(),self.prefix)
self.enable_comments = False
self.registration_required = False
self.template_name = 'project/project_flatpage.html'
super(FlatPage, self).save(force_insert, force_update)
我scaleback管理员只允许重要的东西:
class ProjectFlatPageForm(forms.ModelForm):
prefix = forms.RegexField(label=_("Prefix"), max_length=100, regex=r'^[a-z0-9-]+$'),
class Meta:
model = ProjectFlatPage
class ProjectnFlatPageAdmin(admin.ModelAdmin):
form = ProjectFlatPageForm
所以现在用户可以添加一个单位内页我应用程序并将其与特定项目相关联。
在管理,他们只是进入蛞蝓的页面,它会自动被通过save()方法类似附加:/项目/项目名称/平页名/
剩下的问题是在模板结束。我可以通过给定的模板标签{{flatpage.title}}和{{flatpage.content}}来访问普通的flatpage信息,我无法访问继承模型的额外字段(即项目字段)
有没有办法解决?
EDIT2
已经想过这个问题,最简单的方法是写一个模板标签找到与简单页面相关联的projectFlatPage并从那里访问它。有点像覆盖默认的页面模板标签