是否可以在没有模板的情况下创建函数? 就像我试图创建删除功能一样,我想要做的就是单击删除按钮后立即删除某些内容,然后重定向到其他页面。
我想在用户可以编辑其帖子的页面上放置一个删除按钮。 html就是这样
<button type="submit" class="btn btn-outline-secondary">Save Changes</button>
</form>
我想在该按钮旁边放置删除按钮。
def edit_entry(request, entry_id):
'''Edit a post.'''
entry = Entry.objects.get(id=entry_id)
if request.method != 'POST':
form = EditEntryForm(instance=entry)
else:
form = EditEntryForm(instance=entry, data=request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse_lazy('main:index'))
return render(request, 'main/edit_entry.html', {'entry': entry, 'form': form})
def delete_entry(request, entry_id):
'''Delete post'''
#I don't wanna create template for this function.
pass
有人可以给我提示吗?
答案 0 :(得分:2)
根据文档simple-view,您可以使用httpresponse
from django.http import HttpResponse
def delete_entry(request, entry_id):
'''Delete post'''
#I don't wanna create template for this function.
return HttpResponse('done')
答案 1 :(得分:0)
通常,为此目的使用ajax是有意义的。 在这种情况下,点击的处理分为几个步骤:
1)您单击按钮
2)jQuery(或其他任何JavaScript代码)捕获点击事件,并将AJAX请求(通常为发布请求,因为发布用于REST协议中的数据修改)发送到服务器上定义的网址(例如/delete/my/some/thing/
)在urls.py
3)Djnago将请求路由到delete_something视图(或函数)
4)delete_something接受请求,检查您要检查的内容(例如当前用户的某些权限),删除您实际要删除的内容并做出Ajax响应。
5)jQuery接受此响应(实际上等待3-4个步骤)并检查响应内容,以检测服务器是否表示一切正常或存在某些错误。
这是从jQuery创建ajax请求的代码:
$('#delete-button').click(function(){
var delete_id = (#delete-button).data()
$.ajax
({
url: '/delete/my/some/thing/',
data: {"id": delete_id},
type: 'post',
success: function(result)
{
// here you can write code to show some success messages
},
error: function(result) {
// here you can write code to show some error messages or re-send request
}
});
});
如果需要,您也可以不使用$.ajax()
方法,而可以使用$.post()
。
这是来自this答案的代码,用于做出Django json响应:
return HttpResponse(json.dumps(response_data), content_type="application/json")
它看起来像这样:
import json
from django.http import HttpResponse
def delete_something(request):
resp_data = {}
user = request.user
delete_id = request.POST.get('delete_id') # or None, if there is no delete_id
# here you can check user permissions, if your site has them
# for example check that user can delete something and can delete this entity by writing check_user_can_delete() function
if delete_id and check_user_can_delete(user):
# do your deletion
resp_data = {'status': 'ok'}
else:
resp_data.update(errors=[])
if no delete_id:
resp_data['errors'] = 'no delete_id'
if not check_user_can_delete(user):
resp_data['errors'] = 'you cave no permissions to delete delete_id'
resp = json.dumps(resp_data)
return HttpResponse(resp, content_type='application/json')
还要注意,Django 1.7具有JsonResponse对象,如我提到的SO答案所示。