[英]django; How to create view (function) without template
沒有模板就可以創建函數嗎? 就像我正在嘗試創建刪除功能一樣,我想要做的就是單擊刪除按鈕后立即刪除某些內容,然后重定向到其他頁面。
我想在用戶可以編輯其帖子的頁面上放置一個刪除按鈕。 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
有人可以給我提示嗎?
通過docs 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')
通常,為此目的使用ajax是有意義的。 在這種情況下,點擊的處理分為以下步驟:
1)點擊按鈕
2)jQuery(或任何其他javascript代碼)捕獲點擊事件,並將AJAX請求(通常為發布請求,因為發布用於REST協議中的數據修改)發送到服務器上已定義的url(例如/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()
方法。
這是來自此答案的代碼,用於做出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答案所示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.