我正在使用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/

10-14 19:04
查看更多