簡體   English   中英

Django的; 如何不使用模板創建視圖(函數)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM