Python Django缺少1个必需的位置参数
我正在尝试创建一个视图,可以在具有不同重定向URL的多个应用程序中使用: 父函数: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
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
,但是regexr'^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不是问题,函数只是不接受第二个参数。您是否尝试传递函数areverse
对象的create\u order()
功能?类似于:from django.url import reverse
天哪,我不小心把create\u order放在了url中,而不是admin\u order\u文档中,这正是我想要做的,但我没有注意到