覆盖 AllAuth 视图并将上下文数据传递给模板

Posted

技术标签:

【中文标题】覆盖 AllAuth 视图并将上下文数据传递给模板【英文标题】:Override AllAuth Views and Pass context data to templates 【发布时间】:2020-11-17 11:44:40 【问题描述】:

我不确定我的标题是否正确,但是我有一个标准的 base.html 文件,其中包含来自被覆盖的 allauth 模板的块内容,主要是 account/email.html、account/password_change.html、account/password_set.html和socialaccount/connections.html。根据选择的选项卡,这些中的每一个都输入 base.html。这些选项卡对应于默认的 allauth 视图、帐户/电子邮件、帐户/密码/更改、帐户/密码/设置和帐户/社交/连接。

当我加载 base.html 时,我可以从自定义 Profile 模型中获取用户配置文件信息

@login_required
def base(request):
    email = request.user
    profile = Profile.objects.filter(my_user=email)
    return render(request, 'base.html', 'profile': profile)

只要我在 base.html 模板视图中,用户名就会显示在屏幕的右上角,并且我可以访问模板中使用的所有配置文件信息。但是,当我点击仍然扩展 base.html 的 allauth 默认视图时,标题中的用户名信息会消失,并且配置文件数据不再可用,直到我返回主 base.html 视图。

有人可以帮助我解决我所缺少的关于如何始终在 base.html 文件中维护屏幕右上角的用户名(即使视图发生变化),以及访问不同视图中的配置文件信息?

【问题讨论】:

【参考方案1】:

以防万一这有助于其他人覆盖 AllAuth 视图,可以通过以下方式解决:

class MyEmailView(EmailView):

    def get_context_data(self, **kwargs):
        email = self.request.user
        profile_data = Profile.objects.filter(my_user=email)
        context = super(MyEmailView, self).get_context_data(**kwargs)
        context["profile_data"] = profile_data
        print(context["profile_data"])
        return context

urls.py

# override of email view to add user profile context data
    path("accounts/email/", MyEmailView.as_view(), name="account_email"),

【讨论】:

以上是关于覆盖 AllAuth 视图并将上下文数据传递给模板的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中检索数据并将数据传递给标签栏控制器的子视图?

访问 didSelectRowAtIndexPath 内部的数据源并将数据传递给视图控制器

从数据库加载用户特定设置和站点设置并将数据传递给视图和控制器

创建数据表,将数据传递给视图代码点火器

如何将JSON数据传递给laravel中的视图

单击注释时,如何将数据传递给其视图控制器?