【问题标题】:Add form to django-flatpages将表单添加到 django-flatpages
【发布时间】:2012-01-27 11:42:31
【问题描述】:

我有一个使用平面页面的联系人和信息页面。但是,我想添加一个表单,允许访问者将他们的电子邮件注册到一个列表中。但是,如果我发送 URL 来呈现表单视图,它将没有平面页面上下文。在我的电子邮件表单视图中包含平面页面上下文或将表单上下文添加到我的平面页面的最佳方法是什么。


感谢Tommasa Barbugli 的解决方案。我现在有:

from django.contrib.flatpages.models import FlatPage
from django.shortcuts import render, get_object_or_404

from canada.bulkmail.models import *

def email(request):
    contact_flatpage = get_object_or_404(FlatPage, url='/contact/')
    ContactEmailFormSet = modelformset_factory(Contact, formset=ContactEmailForm)
    if request.method == 'POST':
        formset = ContactEmailFormSet(request.POST)
        if formset.is_valid():
            contact = formset.save()
    else:
        formset = ContactEmailFormSet()
    return render(request, 'flatpages/default.html', {
        "formset": formset,
        "flatepage": contact_flatpage,
    })

【问题讨论】:

    标签: django django-forms django-flatpages django-formwizard


    【解决方案1】:

    从表单页面视图返回正确的上下文。

    这是发送到平面页面模板的上下文(其中 f 是平面页面实例)

    f.title = mark_safe(f.title)
    f.content = mark_safe(f.content)
    
    c = RequestContext(request, {
        'flatpage': f,
    })
    

    在您看来,您可以轻松地返回一个(未保存的)平面页面实例,其中包含您需要的所有属性。

    f = FlatPage()
    f.title = ""
    f.content = ""
    ....
    c = RequestContext(request, {
        'flatpage': f,
    })
    

    【讨论】:

    • 谢谢!反正我就是这么想的。
    【解决方案2】:

    如果您要使用表单,则不需要使用平面页面 - 使用带有平面页面模板的常规视图,并将 RequestContext 作为您的上下文。

    【讨论】:

      猜你喜欢
      • 2014-08-26
      • 1970-01-01
      • 2021-09-23
      • 2014-08-27
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 2015-02-14
      • 2017-01-04
      相关资源
      最近更新 更多