gpt4 book ai didi

django - 为特定应用程序扩展平面

转载 作者:行者123 更新时间:2023-12-04 00:48:20 26 4
gpt4 key购买 nike

我有一个投资组合应用程序,其中列出了项目及其详细信息页面。每个项目通常都有相同的信息(画廊、关于等),但有时用户可能想为一个特别大的项目添加额外的信息,例如可能是关于该页面资金的额外页面。

是否可以在我的投资组合应用程序中创建一个覆盖的平面页面模型,强制在该应用程序中创建的任何平面页面始终以/portfolio/project-name/flat-page 开头。然后我可以简单地将指向与项目关联的平面页面的链接传递给模板,这样用户生成的任何平面页面都将自动从项目页面链接到。

编辑

我现在有点用了

所以我按照描述覆盖了我的投资组合应用程序中的 FlatPage 模型:

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)

它允许我将这个平面页面与特定项目相关联,

然后我覆盖了save方法来写入用户保存时的所有额外信息(需要整理):

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)

我缩减了管理员权限,只允许重要的事情:

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

现在用户可以在我的应用程序中添加一个平面页面并将其与特定项目相关联。

在管理员中,他们只需为页面输入一个 slug,它会通过 save() 方法自动附加,例如:/projects/project-name/flat-page-name/

剩下的问题是在模板端。我可以通过给定的模板标签 {{ flatpage.title }} 和 {{ flatpage.content }} 访问普通的平面信息,但我无法访问继承模型的额外字段(即项目字段)

有什么办法吗?

编辑2

考虑到这一点,最简单的方法是编写一个模板标记来查找与平面页面关联的 projectFlatPage 并从那里访问它。有点像覆盖默认的 flatpages 模板标签

最佳答案

关于您问题的“编辑 2”部分...由于您的自定义平面模型继承自 FlatPage,因此 Django 在它们之间创建了一个自动的一对一字段关系。

因此在您的模板中,如果您知道传入的平面对象是您自定义的对象之一,您可以通过以下方式访问您的额外属性:

{{ flatpage.projectflatpage.project }}

关于django - 为特定应用程序扩展平面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4011332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com