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