You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django模板中向首次访问用户展示提示消息?

嘿,这个需求挺常见的,我来分享几个实用的实现方案,你可以根据自己的场景挑最合适的:

方法1:基于会话(Session)的轻量实现

这个方案适合不需要持久化记录、只针对当前会话的场景,不用改数据库,快速就能搞定。

原理很简单:用户首次访问时,我们在会话里标记一个“已访问”的状态,之后再访问就不再显示提示了。

视图层代码

在你处理首页(或目标页面)的视图里,检查会话中是否有标记,如果没有就设置:

from django.shortcuts import render

def home(request):
    # 检查会话中是否有首次访问的标记
    if not request.session.get('has_visited', False):
        # 设置标记,有效期默认和会话一致(关闭浏览器就失效)
        request.session['has_visited'] = True
        # 如果想让标记持久化(比如7天),可以设置session的过期时间
        # request.session.set_expiry(604800)  # 7天,单位秒
    return render(request, 'home.html')

模板层代码

在模板里直接判断这个会话标记就行:

{% if not request.session.has_visited %}
    <h3>First time here?</h3>
    <h5>Follow these steps...</h5>
{% endif %}
方法2:基于用户模型字段的持久化实现

如果你的网站有用户登录功能,想要跨会话记住用户是否是首次访问,那最好在用户模型里加个字段来记录状态。

1. 扩展用户模型(或自定义用户模型)

在你的models.py里给用户模型添加一个布尔字段:

from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    # 默认值为False,表示还没完成首次访问引导
    first_visit_completed = models.BooleanField(default=False)

记得迁移数据库:python manage.py makemigrations 和 python manage.py migrate

2. 视图层处理

在登录后的首页视图里,检查用户的字段状态,更新标记:

from django.shortcuts import render
from django.contrib.auth.decorators import login_required

@login_required
def dashboard(request):
    user = request.user
    if not user.first_visit_completed:
        # 更新用户状态,标记为已完成首次访问
        user.first_visit_completed = True
        user.save()
    return render(request, 'dashboard.html')

3. 模板层代码

在模板里直接判断用户的字段:

{% if not user.first_visit_completed %}
    <h3>First time here?</h3>
    <h5>Follow these steps...</h5>
{% endif %}
方法3:基于Cookie的实现

和会话类似,但Cookie可以设置更长的过期时间,适合希望用户一段时间没访问后再次显示提示的场景(比如30天)。

视图层代码

from django.shortcuts import render

def home(request):
    # 检查Cookie中是否有标记
    if 'has_visited' not in request.COOKIES:
        response = render(request, 'home.html')
        # 设置Cookie,过期时间设为30天(30*24*60*60秒)
        response.set_cookie('has_visited', 'true', max_age=30*24*60*60)
        return response
    return render(request, 'home.html')

模板层代码

{% if not request.COOKIES.has_visited %}
    <h3>First time here?</h3>
    <h5>Follow these steps...</h5>
{% endif %}
选择建议
  • 如果是匿名用户,且只需要当前会话不显示:选方法1(Session)
  • 如果是登录用户,需要永久记住状态:选方法2(用户模型字段)
  • 如果是匿名用户,希望一段时间后再次显示提示:选方法3(Cookie)

内容的提问来源于stack exchange,提问作者jayt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:29:34