url编码
- 需要在url中加入特定字符做地址标记
- 使用request.get_full_path()获取地址
- request.GET返回一个不可修改的QueryDict类型,里面记录路径中的k-v对应
- 将QueryDict类型变成可修改的类型,并且保证类型等都不变,修改mutable属性
- 将标记字符添加到QueryDict里面
- 使用urlencode()方法将地址编码,他将url里面的不安全字符如=、&换成16进制的ascii码,这样就能够使参数部分为一个整体
- 最后将完整地址拼接起来
from django.http.request import QueryDict
from django.urls import reverse
from django import template
register = template.Library()
@register.simple_tag
def resole_url(request,url_name,customer_pk):
# 编辑保存之后跳转回的路径
next_url = request.get_full_path() # /customers/?page=3
reverse_url = reverse(url_name,args=(customer_pk,)) # /edit_customer/1/
q = QueryDict(mutable=True)
q['next'] = next_url # queryDict({'next':'/customers/?page=3&kw=111'})
next_url = q.urlencode() # next=/customers/%3Fpage%3D%26kw%3D111
full_url = reverse_url + '?' + next_url
print(full_url)
return full_url