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

Python Django缺少1个必需的位置参数,python,django,python-3.x,Python,Django,Python 3.x,我正在尝试创建一个视图,可以在具有不同重定向URL的多个应用程序中使用: 父函数: def create_order(request, redirect_url): data = dict() if request.method == 'POST': form = OrderForm(request.POST) if form.is_valid(): form.save() return redire

我正在尝试创建一个视图,可以在具有不同重定向URL的多个应用程序中使用:

父函数:

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)
子函数:

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\u order\u 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

urlpatterns = [
    url(r'^admin/', admin_site.urls),
    ...
]
对于你的管理站点,你需要像这样调用你的函数:

@login_required()
def admin_order_document(request):
    redirect_url = 'admin:order_waiting_list'
    return create_order(request, redirect_url)
这会解决你的问题

url(r'^orders/create/', views.create_order, name='create_order')
这显然是行不通的,因为
create\u order
需要
redirect\u url
,但是regex
r'^orders/create/'
中没有
redirect\u url
kwarg

也许您想在此处使用
管理订单\u文档
视图:

url(r'^orders/create/', views.admin_order_document, name='create_order')

注意:除非您想匹配
orders/create/something
以及
orders/create/
,否则您应该添加一个尾随美元,即
r'^orders/create/$”

您使用的是哪个Django版本?Django版本1.11.7哪个URL给出了错误消息,该URL的URL模式是什么?URL(r'^orders/create/',views.create_order,name='create_order'),create_order函数存在于core中,我正在管理员视图中导入它。没有更改常规管理员url,存在其他应用程序管理员。在主url中:url(r'^administrator/',include('administrator.url',namespace='administrator')),我的错是,
order\u waiting\u list
在您的
管理员中命名为
name='order\u waiting\u list'
。url
?在管理员的url中命名为'order\u waiting\u list',因此要访问它,我必须编写管理员:order\u waiting\u list,但我认为url不是问题,函数只是不接受第二个参数。您是否尝试传递函数a
reverse
对象的
create\u order()
功能?类似于:
from django.url import reverse
天哪,我不小心把create\u order放在了url中,而不是admin\u order\u文档中,这正是我想要做的,但我没有注意到