5

我正在使用 Django 创建一个简单的网站,其中我使用模板继承。“母版页”模型包含显示在所有页面上的信息,例如页眉或页脚。我无法对其进行硬编码,因为我需要它可以从管理页面进行编辑。

目前(一些)我的模型看起来有点像这样:

class MasterContent(models.Model):
    title_header = models.CharField(max_length=200)
    name_header = models.CharField(max_length=200)

class ProfileContent(models.Model):
    description = models.TextField()
    profile_picture = models.ImageField(upload_to='profile')

然后我渲染到这样的视图:

def profile(request):
    return content_shortcut(ProfileContent, 'pages/profile.html')

def content_shortcut(content_class, template):
    return render_to_response(template, {'master_content':MasterContent.objects.get(id=1), 'content':content_class.objects.get(id=1)})

现在,我需要从不同的应用程序呈现视图,但我仍然希望传递母版页内容。master_page如果我每次渲染视图时都必须手动包含内容(即使使用快捷方式,它似乎是错误的),这对我来说会变得太混乱。我尝试将 MasterContent 抽象化,但这迫使我在从它继承的每个其他模型中重新输入数据,这是一个更糟糕的情况。

简而言之:我怎样才能轻松地在所有视图中获得数据,跨应用程序,可以从管理页面中的一个位置进行编辑,同时保持干燥!

注意:我还认为必须有一种更流畅的方式(比如平面页面)来管理个人资料页面的内容,而不是拥有一个我只会使用一个实例/行的模型,但我现在选择忽略这一点。 ..

4

2 回答 2

7

听起来像一个inclusion tag甚至一个simple tag应该做的工作就好了。您可以查询标签中的内容并将标签嵌入到您的基本模板中。

如果您在每个页面上都需要此信息,则context processors可能是另一种选择,尽管模板标签可能更适合您的用例。

于 2012-10-07T22:10:18.047 回答
0

抱歉,如果我不完全理解您的问题,但您不能只导入主内容吗?

例如

from mainapp.models import MasterContent
from mainapp.views import content_shortcut

然后开始你的新观点

def differentprofile(request):
    return content_shortcut(DifferentProfileContent, 'pages/differentprofile.html')
于 2012-10-07T21:54:10.113 回答