Django中如何将用户IP地址从ListView类视图传递到模板?
问题原因
- Django 通用类视图的
get_context_data方法默认签名不需要显式传入request参数,request 对象是直接绑定在视图实例self上的,你额外添加的request参数会导致调用时参数数量不匹配,抛出错误。
修改后的 views.py 代码
class PostListView(ListView): model = Post template_name = 'blog/home.html' context_object_name = 'posts' ordering = ['-date_posted'] paginate_by = 5 def get_context_data(self, **kwargs): # 从self.request中获取session存储的IP ip = self.request.session.get('ip', 0) context = super().get_context_data(**kwargs) context['ip'] = ip return context
补充优化说明
- 如果需要兼容未登录用户的IP获取,可以不用完全依赖登录信号存session,直接在
get_context_data中取self.request.META.get('REMOTE_ADDR')即可,不需要等待用户登录也能拿到访问IP。 - 原模板的调用代码不需要修改,保持
{{ ip }}即可正常渲染IP值。
内容的提问来源于stack exchange,提问作者BiswajitPaloi
相关产品推荐
相关产品推荐

