主要内容:
1 添加用户后跳转到原来的页面:
a : 出现的问题:, 在点击搜索条件后, 此时在添加满足条件的用户,不会出现在该页面, 跳转到 customer_lsit页面上
b : 解决方案 : 把查询条件和路径拼接到url的后面, 此时html页面中a标签的url后面不能直接跟next = {{url}}, 而应该使用querydict的一个方法urlencode()
c : 有以下两种方法:
1 .在customer_list页面端的a标签, 拼接路径
在后端的views方法写:
url = request.get_full_path() print(url) qd = QueryDict() qd._mutable = True qd['next'] = url print(' 这是qd: ',qd) qdurl = qd.urlencode()
在html页面中:(在后端返回页面的时候把该qdurl传过来)
<a href="{% url 'add_customer'%}?{{ qdurl }}" class="btn btn-primary btn-sm">添加</a>
2 定义一种方法
在视图函数中的写法:
在生成用户列表的cbv中写这样的一个方法, 在该用到的地方调用该方法. # 定义一个生成标签的方法 def a_tag(self): url = self.request.get_full_path() print('这是full-path的内容',url) print('这是path-info的内容',self.request.path_info) qd = QueryDict() qd._mutable = True qd['next'] = url qdurl = qd.urlencode() print('这是编码后的eurl',qdurl) add_btn = '<a href="{}?{}" class="btn btn-primary btn-sm">添加</a>'.format(reverse('add_customer'), qdurl) return add_btn, qdurl
在html中的写法:(后端传过来的是一个变量, 所以html页面渲染的时候直接用{}{就可以.})
{{ add_btn1 }}
注意1 : request.path-info和request.get_full_path的区别和联系
这是full-path的内容 /customer_list/?query=%E6%9D%8E&page=2; full-path获取全部的url的内容 这是path-info的内容 /customer_list/ path-info获取的是?之前的内容
注意2: querydict的用法的注意点:
1, 要想修改必须把属性_mutale = ture 2, querydict的一个方法:urlencode() 3, 优点 {# 如果直接把url加在next的后面, 此时会出现取不到page的问题, 因为&符相当于多个条件, 只能取到&之前的内容.#} {# <a href="{% url 'add_customer'%}?next={{ url }}" class="btn btn-primary btn-sm">添加</a>#} {# 现在把url写在querydict里面, 通过urlencode写成url的形式next=%2Fcustomer_list%2F%3Fquery%3D%25E6%259D%258E#}
2 跟进记录表: