5

テンプレートの継承を使用している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つのインスタンス/行のみを使用するモデルよりもスムーズな方法(フラットページなど)が必要だと思いますが、今のところこれを無視することにしました。 ..

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 に答える