我正在使用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')
然后,我渲染到这样的 View :
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)})
现在,我需要从其他应用程序渲染 View ,但是我仍然希望将母版页内容传递给其他人。如果我每次渲染 View 时都必须手动包括
master_page
内容(即使使用快捷方式,这似乎是错误的),这对于我的喜好来说将变得太凌乱。我尝试使MasterContent抽象化,但是这迫使我在从其继承的每个其他模型中重新输入数据,这是一个更糟糕的情况。简而言之:如何轻松地在应用程序的所有 View 中提供数据,可以在管理页面的单个位置进行编辑,同时保持数据干燥!
注意:我还认为,与使用仅会使用一个实例/行的模型相比,管理个人资料页面的内容必须有一种更为流畅的方式(类似于平版纸),但是我现在暂时忽略了这一点。 ..
最佳答案
听起来像 inclusion tag
甚至是 simple tag
都可以完成这项工作。
您可以查询标签中的内容,并将标签嵌入基本模板中。
如果在每个页面上都需要此信息, context processors
可能是另一种选择,尽管模板标签可能更适合您的用例。
关于python - Django中的"Master page"管理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12773100/