访问django扩展平面中的字段

时间:2010-12-22 09:26:46

标签: python django django-flatpages

如何访问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!有什么问题?

2 个答案:

答案 0 :(得分:4)

是的,因为rebus提到FlatpageFallbackMiddleware会将默认的FlatPage模型实例传递给模板。但在您的情况下,模板变量{{ flatpage }}也会记住它是ExtendedFlatPage实例,如django-docs中所述。

因此,要将您的平面视为ExtendedFlatPage,您必须使用:

{{ flatpage.extendedflatpage.teaser }}代替{{ flatpage.teaser }}

答案 1 :(得分:0)

当然您将正确的对象传递给模板,而不是普通的FlatPage?

此外,除非您的代码粘贴来自不同的文件并且您没有显示您的导入,否则您的模型应该包含来自django.models的字段和来自django.forms的表单。你没有在你的小模板中显示表单,所以我认为这不是问题......但如果你的模型'teaser'来自django.forms.CharField而不是django.models.CharField那么......你可能不会看到它。但是你说管理员还可以吗?

你确定它渲染那个模板而不是类似的吗? (你的至少应该有一个空的&lt; blockquote&gt;对)。

尝试从django shell获取你的对象(foo = ExtendedFlatPage.objects.get(id = 1)或类似)并在其上执行foo.teaser ...