如何在Django模板中将base64格式uid变量转换为普通整型数字
Django模板uid转纯整型数字实现方案
Django模板没有内置的uidb64解码转整型能力,需要通过自定义模板过滤器实现,操作步骤如下:
步骤1:新增自定义模板过滤器
在你的应用目录下新建templatetags文件夹,新增custom_filters.py文件,写入以下代码:
from django import template from django.utils.http import urlsafe_base64_decode register = template.Library() @register.filter def uidb64_to_int(uidb64): try: # 先解码base64格式的uid,再转为整型 uid = urlsafe_base64_decode(uidb64).decode() return int(uid) except (TypeError, ValueError, OverflowError): # 解码失败时可根据业务需求调整返回值 return None
确保你的应用已经在settings.py的INSTALLED_APPS中注册,修改完成后重启Django服务让过滤器生效
步骤2:模板中调用过滤器
首先在模板顶部加载自定义过滤器:
{% load custom_filters %}
需要获取整型uid的位置直接调用过滤器即可,示例修改后的代码如下:
<a href="{% settings_value "BASE_URL" %}{% url 'password_reset_confirm' uidb64=uid token=token %}{% if link_query_params %}?{{ link_query_params }}&uid_int={{ uid|uidb64_to_int }}{% else %}?uid_int={{ uid|uidb64_to_int }}{% endif %}" target="_blank">
如果需要直接把路由参数替换为整型uid,先调整对应路由的参数匹配规则,再把uidb64=uid改为uid={{ uid|uidb64_to_int }}即可。
内容的提问来源于stack exchange,提问作者Павел Иванов
相关产品推荐
相关产品推荐

