2017-03-18 4 views
0

私はDjangoでウェブサイトを構築しています。私は、現在ハードコードされている私のヘッダーテンプレートのウェブサイトのメインタイトルを持っています。Django:ウェブサイトのタイトルを管理者で編集できる適切な方法

ウェブサイト管理者(または適切な資格情報を持っているすべてのユーザー)が管理者で編集できるようにするにはどうすればよいですか?理想的には、adminなどでサイト全体(またはアプリ全体)の属性を編集できるようにしたいと考えています(サイトやアプリの説明など)。

私はWordPressの 'bloginfo()のようなものを覚えています。その具体的な例はwashingtonpost.comで、数週間前にヘッダーのモトーを「暗闇の中の民主主義」に変えました。

もちろん、タイトル(または他の属性)が管理者で編集された後は、テンプレート内からそのテンプレートを取得する必要があります。あなたは、例えば、このような動的なWebサイトのパラメータを格納するための簡単なモデルを作成することができます

答えて

1

class WebsiteParam(models.Model): 
    key = models.CharField(max_length=50) 
    val = models.CharField(max_length=1024) 

は、カスタムテンプレートコンテキストプロセッサsettings_processor.pyを定義

def settings_processor(request): 
    vals = {x.key: v.val for x in WebsiteParam.objects.all()} 
    return {'website_settings': vals} 

Django設定には、このプロセッサを追加します。 .pyのようなもの:

from django.conf import global_settings 
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
    "myapp.settings_processor.settings_processor", 
) 

データベース

に追加titleキーで設定を持っている場合は、必要な場合は、もちろん

要求コンテキストプロセッサやその他の条件にキャッシュ機能を追加する必要があります

<html><head><title>{{website_settings.title}}</title>... 

のようなあなたのテンプレートのすべてのあなたの設定を使用することができ

+0

ありがとう、私は今日の午後にそれを与えて、ここにいくつかのフィードバックを与えるでしょう。 – GuitarExtended

+0

このモデルのインスタンス数を1に制限する方法はありますか? 2つ以上あることは理にかなっていません。 – GuitarExtended

+0

私の前のコメントのために申し訳ありません、私はあなたの答えの論理を逃した。私が持っている問題は、website_settingsがクエリーセットであるため、website_settings.titleが機能しないことです。すべてをループし、{%if%}ステートメントで必要なものだけを選択することで個々の設定にアクセスできます。どのようにこれを回避するための任意のアイデアですか? – GuitarExtended

関連する問題