flyEn'blog

django重定向&ajax-post

重定向

1.

1
2
3
4
# 类视图表单跳转url
reverse_lazy('news:manage_list')+'?type='+article_type
# 方法视图跳转url
HttpResponseRedirect(reverse('news:manage_list')+'?type='+article_type)

由于是一个相对路径所以可以拼接字符串

2.

1
2
# 跳转url传入关键字参数
HttpResponseRedirect(reverse('home:banner_index', kwargs={'type': type}))

3.

1
redirect('house:manage_index')

HttpResponseRedirect第一个参数只能是一个url, , redirect更灵活, 可接受view,model,和url

4.

1
return render(self.request, 'charge/preview.html', locals())

类视图里get方法必须返回一个url

1
return render(request, self.template_name, context)

1
return render_to_response(self.get_context_data(form=form))
1
2
return render_to_response(template_name,{'message_list': message_list, },
context_instance=RequestContext(request))

5.

1
return redirect(request.GET.get('next', reverse('account:index')))

1
2
3
4
5
6
7
8
9
10
# post.ajax
class ManageCreateTagAjax(View):
def post(self, request, *args, **kwargs):
name = request.POST.get('tag')
if Tag.objects.filter(name=name, user=None).exists():
# 如果已经存在该tag则在前台弹出框报错
return JsonResponse({})
else:
tag = Tag.objects.create(name=name)
return JsonResponse({'name': tag.name, 'id': tag.id})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$('#create').click(function () {
var tag_name = $('#name');
$.ajax({
type: 'POST',
url: "{% url 'house:manager_create_tag' %}",
data: {
tag: tag_name.val()
},
success: function (data) {
tag_name.val('');
if (data.name) {
window.location.reload();
} else {
alert("同名通用标签已经存在");
}
}
})
})

JsonResponse返回给前台json数据, if (data.name) {window.location.reload()}else{…}; 如果得到name数据则加载页面没有得到即报错
如果url为空, 则是在当前类视图下post方法里处理
? : HttpResponse(json.dumps({"re_statue": 1}))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if(count==0){
var yes = function (val, index, elem) {
var data= {"check_status":1,"object_id": object_id};
$.post(url, data, function (data) {
if (data.status == 1) {
showAlertMsg("操作成功", 6);
location.href = '{% url 'user:manage_developer_verify' %}';
} else {
showAlertMsg("后台错误", 5);
}
});
};
showYesorNo("是否通过审核", yes);
}else{...}

另一种ajax.post写法

如果有个数据需要在很多模板页运用,可自定义一个模板页标签

1
2
3
4
from django.template import Library

register = Library()
register.tag('inbox_count', do_print_inbox_count)

1
2
3
4
5
6
{% inbox_count as my_num %}
{% if my_num > 0 %}
<span class="label label-important badge">
{{ my_num }}
</span>
{% endif %}
Fork me on GitHub