我正在嘗試構建論壇。在處理URL時,會有一個主板ID和一個主板名稱。板名僅存在用戶可讀性,意思是如果有人正確輸入了ID,但板名錯誤或已更改,則會將其重定向到正確的URL。我創建了一個函數來管理這個問題,因爲我需要多次檢查板子是否正確,而不僅僅是這個URL。Django在函數內部重定向
# urls.py
...
url(r'^boards/(?P<board_id>\d+)/(?P<board_name>[^/]+)/$', views.board, name='board'),
...
# views.py
def board(request, board_id, board_name):
RedirectIfWrong(request, board_id, board_name)
...
return render(request, 'forums/board.html', {'board': board})
def RedirectIfWrong(request, pk, name):
board = Board.objects.all().get(pk=pk)
if (board.name != name):
return redirect(request.get_full_path().replace(name, board.name, 1))
但是,當我在函數內部調用重定向它不起作用。我也聽說過使用中間件來做到這一點。這是如何工作的,我如何使它只適用於涉及董事會的網站?
這讓我回到了重定向,但也導致一個錯誤,如果它是正確擺在首位。該視圖forums.views.board沒有返回一個HttpResponse對象。它返回None而不是 – mei
在函數'RedirectIfWrong'你需要添加else語句像它一樣'return HttpResponseNotFound('
Page not found
')' –我很困惑。如果它是正確的,我需要它不會返回,因此它可以處理視圖的其餘部分。閱讀時,我發現裝飾器和中間件。在這種情況下,這些適合使用嗎? – mei