【问题标题】:Access to field in extended flatpage in django访问 django 扩展平面页面中的字段
【发布时间】:2010-12-22 09:26:46
【问题描述】:

如何在 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!怎么了?

【问题讨论】:

  • 我认为 FlatpageFallbackMiddleware 仍将使用默认的 Flatpage 模型。此外,您的方法将使用 Multi-table inheritance,这意味着您为扩展模型创建了两个表,这会降低您的查询效率。
  • 是的,我在其中看到了第二张表和正确的值。问题是如何访问平面模板中的新字段?
  • 您可以创建自定义中间件,该中间件将使用扩展模型而不是普通的 FlatPage。看看 FlatpageFallbackMiddleware 代码,很容易修改以适应您自己的需求。

标签: python django django-flatpages


【解决方案1】:

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

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

{{ flatpage.extendedflatpage.teaser }} 而不是{{ flatpage.teaser }}

【讨论】:

    【解决方案2】:

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

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

    你确定它渲染那个模板而不是一个类似的吗? (你的应该至少有一个空的

    对)。

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

    【讨论】:

    • 他将中间件用于平面页面,因此他实际上并没有传递对象,中间件获取了默认的平面页面对象,因为他没有告诉它使用扩展的平面页面对象。
    猜你喜欢
    • 2011-07-14
    • 2013-08-12
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    相关资源
    最近更新 更多