テンプレートの継承を使用しているDjangoで簡単なWebサイトを作成しています。「マスターページ」モデルには、ヘッダーやフッターなど、すべてのページに表示される情報が含まれています。管理ページから編集できるようにする必要があるため、ハードコーディングできません。
現時点では(一部の)私のモデルは次のようになっています。
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を抽象化しようとしましたが、これにより、データを継承する他のすべてのモデルにデータを再入力する必要があります。これは、はるかに悪いシナリオです。
つまり、アプリ全体のすべてのビューでデータを簡単に利用できるようにする方法です。データは、管理ページの1つの場所から編集でき、物事をドライに保ちます。
注:プロファイルページのコンテンツを管理するには、1つのインスタンス/行のみを使用するモデルよりもスムーズな方法(フラットページなど)が必要だと思いますが、今のところこれを無視することにしました。 ..