请帮助理解为什么以下内容对我不起作用。 因此,我需要在登录用户的页面上显示信息。 为了不在每个视图中重新键入代码,我决定创建一个mixin。
class MyMixin(object):
def my_view(self):
args = {}
args['username'] = auth.get_user(request).username
args['first_name'] = auth.get_user(request).first_name
args['last_name'] = auth.get_user(request).last_name
return args
class someview (TemplateView, LoginRequiredMixin, MyMixin):
template_name = 'index.html
但是这并没有在模板中显示任何内容。
{{ first_name }}
答案 0 :(得分:1)
至少有两种方法可以获得这些"上下文变量"进入你的模板:
您的TemplateView
已包含ContextMixin
。因此,您可以简单地覆盖该视图的ContextMixin
get_context_data
方法,如下所示:
class someview (TemplateView, LoginRequiredMixin):
template_name = 'index.html
def get_context_data(self, **kwargs):
context = super(someview, self).get_context_data(**kwargs)
context['username'] = self.request.user.username
context['first_name'] = self.request.user.first_name
context['last_name'] = self.request.user.last_name
return context
您实际上正在寻找的是一种更干燥的方法,而不一定是混合方法。在这种情况下,您应该使用自己编写的context_processor
:
context_processors.py:
def extra_context(request):
args = {}
args['username'] = auth.get_user(request).username
args['first_name'] = auth.get_user(request).first_name
args['last_name'] = auth.get_user(request).last_name
return args
settings.py:
TEMPLATE_CONTEXT_PROCESSORS += (your_app.context_processors.extra_context,)
第二种方法会将这三个上下文变量添加到应用中的每个模板。