6

djangoの拡張フラットページのフィールドにアクセスするには?
私はこれを書きました:

class ExtendedFlatPage(FlatPage):
     teaser = CharField(max_length=150)

class ExtendedFlatPageForm(FlatpageForm):
     teaser = CharField(max_length=150)
     class Meta:
        model = ExtendedFlatPage

class ExtendedFlatPageAdmin(FlatPageAdmin):
    form = ExtendedFlatPageForm
    fieldsets = (
        (None, {'fields': ('url', 'title', 'teaser', 'content', 'sites',)}),
    )     

admin.site.unregister(FlatPage)
admin.site.register(ExtendedFlatPage, ExtendedFlatPageAdmin)

また、管理者での作成は問題ありません。しかし、 flatpages/default.html でこれを試しました:

<html>
<body>
<h1>{{ flatpage.title }}</h1>
<strong>{{ flatpage.teaser }}</strong>
<p>{{ flatpage.content }}</p>
</body>
</html>

そして、flatpage.teaser はありませんでした。なにが問題ですか?

4

2 に答える 2

6

はい、rebus が述べたように、FlatpageFallbackMiddleware はデフォルトの FlatPage モデル インスタンスをテンプレートに渡します。ただし、ここでdjango-docsで説明されているように、テンプレート変数はインスタンスで{{ flatpage }}あるかどうかも記憶します。ExtendedFlatPage

ExtendedFlatPageしたがって、フラットページを使用する必要がある場合は、次のように扱います。

{{ flatpage.extendedflatpage.teaser }}の代わりに{{ flatpage.teaser }}

于 2011-02-19T13:00:56.667 に答える
0

プレーンな FlatPage ではなく、正しいオブジェクトをテンプレートに渡していますか?

また、コードの貼り付けが別のファイルからのもので、インポートを表示していない場合を除き、モデルには django.models のフィールドと django.forms のフォームが必要です。小さなテンプレートでフォームを表示していないので、それが問題だとは思いません...しかし、モデルの「ティーザー」がdjango.models.CharFieldではなくdjango.forms.CharFieldから来ている場合...あなたはおそらく見ないでしょう。しかし、あなたは管理者で大丈夫だと言いますか?

似たようなテンプレートではなく、そのテンプレートをレンダリングしていますか? (少なくとも空の <blockquote> ペアが含まれている必要があります)。

django シェルから試して、オブジェクト (foo = ExtendedFlatPage.objects.get(id=1) など) を取得し、それに foo.teaser を実行します...

于 2010-12-22T09:51:11.777 に答える