我正在尝试制作一个可以在具有不同重定向 URL 的多个应用程序中使用的 View :
父函数:
def create_order(request, redirect_url):
data = dict()
if request.method == 'POST':
form = OrderForm(request.POST)
if form.is_valid():
form.save()
return redirect(redirect_url)
else:
form = OrderForm()
data['form'] = form
return render(request, 'core/order_document.html', data)
子函数:
@login_required()
def admin_order_document(request):
redirect_url = 'administrator:order_waiting_list'
return create_order(request, redirect_url)
当我尝试调用 admin_order_document 函数时,我得到:
Traceback (most recent call last):
File "/home/project/venv/lib/python3.5/site-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/home/project/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/project/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
TypeError: create_order() missing 1 required positional argument: 'redirect_url'
如果我从两个函数中删除 redirect_url 并手动将 'administrator:order_waiting_list' 添加到 redirect() 它有效,但我需要重定向到多个 url。那么,为什么我会收到此错误?
请您参考如下方法:
url(r'^orders/create/', views.create_order, name='create_order')
这显然是行不通的,因为 create_order 需要 redirect_url 但正则表达式 r' 中没有 。redirect_url kwarg ^订单/创建/'
也许您想在这里使用 admin_order_document View :
url(r'^orders/create/', views.admin_order_document, name='create_order')
注意你应该添加尾随美元,即 r'^orders/create/$' 除非你想匹配 orders/create/something-else 以及订单/创建/。
