Skip to main content
 首页 » 编程设计

python之Django 缺少 1 个必需的位置参数

2024年08月16日31zhengyun_ustc

我正在尝试制作一个可以在具有不同重定向 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 以及订单/创建/。