簡體   English   中英

將參數傳遞給Django中的視圖

[英]Passing parameters to a view in Django

在我的urls.py我已將handler404設置為CustomErrorView CustomErrorView是一個通用視圖,它根據收到的錯誤消息和錯誤代碼為錯誤生成模板。

由於handler404僅在發生404錯誤的情況下引發,因此如何在引發錯誤代碼時將errorcode errorcode = 404 kwarg發送到CustomErrorView

已經嘗試過-

  • handler404 = CustomErrorView(errorcode = 404)
    這將導致“預期的一個位置參數,沒有給出任何錯誤”。
  • handler404 = CustomErrorView(request, errorcode = 404)
    這將導致NameError( Name 'request' is not defined

我的urls.py:

from django.conf.urls import url, include
from django.contrib import admin
from blog_user.views import home, create_error_view

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', home),
    url(r'^', include('user_manager.urls')),
    ]

handler404 = create_error_view(error = 404)
handler500 = create_error_view(error = 500)

我的views.py(使用@knbk建議的修改后):

from django.shortcuts import render
from django.http import HttpResponse, HttpResponseNotFound

def create_error_view(error = 404, mybad = False):
    def custom_error_view(request, error, mybad):
        ''' Returns a generic error page. Not completed yet. error code and messages are supposed to be modular so that it can be used anywhere for any error in the page.'''
        content = "Incorrect url"
        context= {
            'error': error,
            'content':content,
            'mybad':mybad
        }
        response = render(request, 'error.html', context=context, status=error)
        return HttpResponse(response)
    return custom_error_view

您可以使用函數閉包來創建視圖函數:

def create_error_view(error_code):
    def custom_error_view(request, *args, **kwargs):
        # You can access error_code here
    return custom_error_view

然后只需調用create_error_view來設置處理程序:

handler404 = create_error_view(error_code=404)

或者,您可以使用functools.partial() ,基本上可以做到這一點:

from functools import partial

handler404 = partial(custom_error_view, error_code=404)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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