覆盖 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 内部的数据源并将数据传递给视图控制器