为了账号安全,请及时绑定邮箱和手机立即绑定

为两个不同的模板使用相同的视图返回表单变量

为两个不同的模板使用相同的视图返回表单变量

DIEA 2023-03-16 11:24:32
我有一个显示到订阅页面的订阅表单视图,我也想在主页中显示相同的表单,我尝试使用{% include 'accounts/subscribe.html' %}并{% extends 'accounts/subscribe.html' %}在主页中也尝试过(来自类似问题的建议,但不相同)。我该如何解决这个问题?指向 subscribe.html 的视图def subscribe(request):    if request.method == 'POST':        subscribe_form = EmailListForm(request.POST)        if subscribe_form.is_valid():            subscribe_form = subscribe_form.save()            return render(request, 'accounts/subscribe_done.html', {'name': subscribe_form.name})    else:        subscribe_form = EmailListForm()    return render(request, 'accounts/subscribe.html', {'sub_form': subscribe_form})
查看完整描述

3 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

据我所知,这样做的方法是将上面的代码复制到主视图函数,或者提取一个获取请求并返回所需表单对象的方法。无论哪种方式,您都可以像在订阅页面上一样将表单对象传递给主页模板。



查看完整回答
反对 回复 2023-03-16
?
慕容森

TA贡献1853条经验 获得超18个赞

如果您想将相同的表单呈现到另一个页面(视图),您可以将该表单添加到视图的上下文中,就像在订阅页面上所做的那样。主页视图如下所示:


def home_page_view(request):    

    if request.method == 'POST':

        subscribe_form = EmailListForm(request.POST)

        if subscribe_form.is_valid():

            subscribe_form = subscribe_form.save()


            return render(request, 'accounts/subscribe_done.html', {'name': subscribe_form.name})


    else:

        context = {

            'section': 'home',

            'posts': Post.published.all().order_by('-publish')[:5],

            'subscribe_form': EmailListForm()

        }

        

    return render(request, 'pages/page/home.html', context=context)


查看完整回答
反对 回复 2023-03-16
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

使用{% extends 'xyz.html' %}工作吗?我通常用它来扩展 html 模板。



查看完整回答
反对 回复 2023-03-16
  • 3 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信