将模板名称传递到DJango视图以呈现

时间:2017-12-12 04:00:53

标签: django templates

我正在使用DJango View。它正在实施为function-based view。我想要做的是将模板传入函数以呈现为HTML文档。

在下面的示例中,我想传递模板名称以供使用,而不是硬编码'storeowner / mstrstorehead_form.html'

如何做到这一点?我在这里看到了这些信息:

How should template names be set dynamically using class based views?

但它更多地处理基于类的视图

TIA

views.py

@login_required
def edit_store_data(request):
    success = False
    message = 'No changes to report'
    message_color = 'green'

    username = request.user.username
    local_email = request.user.email
    local_pass = request.user.password

    [... snip ... ]

    return render(request, 'storeowner/mstrstorehead_form.html',
                          {'form': master_store_head_form, 'success': `success, 'message': message, 'message_color': message_color})`

更新

这种方式的工作方式是用户使用电子邮件地址和密码“注册”。 “登录链接”作为“验证电子邮件”的一部分发送给用户。

单击登录链接时会发生什么情况取决于数据库中是否已存在所需的其他(所需)信息。

如果信息不在数据库中:当点击链接时,用户将转移到页面以将其输入系统(由此表单表示 - 名字,姓氏等)。保存基本信息后,用户将被转移到“主页”

如果信息在数据库中:用户将自动转移到主页。

无论哪种方式,当用户登录时,他/她将有机会更改数据(登录后) - 通过单击其中一个菜单项(例如:个人资料)

所以,这个cpde可以从2个地方调用

  • =>一次用数据“初始化”数据库(登录主页之前)

  • =>另一次修改数据 - 登录主页后(例如:如果此人结婚并且必须更改姓氏) DB)

唯一会改变的(在2个地方之间)是使用的模板(因此我希望将其传递)。它类似于上面提到的问题(除了它指的是基于交叉的视图)

1 个答案:

答案 0 :(得分:0)

听起来像你所追求的是redirect

首先,您可以检查网址中提供的HTTP GET数据并执行一些数据库查找,然后 - 根据您的要求 - 您可以重定向到主页或带有网络表单的其他网页以获取更多信息。

可能类似以下内容:

def link_process(request):
    # get some GET params encoded in URL like 
    # www.mydomain.com/handle_login_link?username=john
    username = request.GET['username']
    # do related db lookups:
    ...

    #conditional redirect
    if need_more_data:
        return redirect('some-view-name', form=MoreDataForm)
    else:
        return redirect('homepage')