我有一个Django应用,该应用需要显示一个可以访问该网站的视频。我只希望它在初次访问时执行此操作,而不是在用户每次刷新时执行此操作。我觉得会议可能与此有关,但我不确定。谢谢!
答案 0 :(得分:1)
我认为最好将此标志直接放在您的数据库中。您可以在用户模型(如果使用自定义用户)中或在与OneToOne
有User
关系的模型中放置一个字段。例如:
class Profile(models.Model):
user = models.OneToOneField(User)
has_seen_intro = models.BooleanField(default=False)
然后从这样的视图中将此信息发送到模板,例如:
class HomeView(TemplateView):
template_name = 'home.html'
def get_context_data(self, **kwargs):
context = super(HomeView, self).get_context_data(**kwargs)
profile = self.request.user.profile
if not profile.has_seen_intro:
context['show_intro'] = True
profile.has_seen_intro = False
profile.save()
# or use user.has_seen_intro if you have custom model
return context
并像这样更新模板
{% if show_intro %}
// intro video codes
{% endif %}
对于匿名用户,请尝试以下操作:
class HomeView(TemplateView):
template_name = 'home.html'
def get_context_data(self, **kwargs):
context = super(HomeView, self).get_context_data(**kwargs)
if self.request.user.is_authenticated:
profile = self.request.user.profile
if not profile.has_seen_intro:
context['show_intro'] = True
profile.has_seen_intro = False
profile.save()
else:
if not self.request.session.get('has_seen_intro', True):
self.request.session['has_seen_intro'] = False
context['show_intro'] = True
return context