django urls:默认值的可选参数总是None
django urls : optional argument with default value is always None
我有一个视图用于在我的数据库中插入/更新一个名为 BankAccounts
的 table ... 基本上如果 info_id
被传递给它的函数 edit/update
如果不是,它的默认值是 insert
操作
def bankcreate( requset , info_id = 0 ):
print(' -----> id is ' + str(info_id))
errors = []
default = None
if info_id is not None and info_id > 0 :
try:
default = BankAccounts.objects.get(id=info_id , user_id=requset.user.id)
except BankAccounts.DoesNotExist :
default = None
if requset.POST :
VALIDATIONRULES = {} # some rules here
data , errors = validation(requset , VALIDATIONRULES)
if not errors :
if info_id > 0 and default is not None:
ba = default
else :
ba = BankAccounts()
ba.bank_accnumber = data['bank_accnumber']
ba.bank_cartnumber = data['bank_cartnumber']
ba.bank_shabanumber = data['bank_shabanumber']
ba.bank_title = data['bank_title']
ba.user_id = requset.user.id
ba.save()
return redirect('account-bank')
else:
default = data
return render(requset , 'account/bankcreate-form.html' ,
{'default':default , 'errors':errors} )
因此,如您所见,无论是否使用 info_id,都应该可以访问该功能
这是我的 rules.py
urlpatterns = [
url(r'^$', views.index , name='account-home'),
url(r'^edit$', views.edit , name='account-edit'),
url(r'^bankinfo', views.bankinfo , name='account-bank'),
url(r'^bankcreate/(?:/(?P<info_id>[1-9]+)/)?', views.bankcreate , name='account-bankcreate'),
]
如你所见,我正在尝试在最后一行写一个可选参数
url(r'^bankcreate/(?:/(?P<info_id>[1-9]+)/)?', views.bankcreate , name='account-bankcreate'),
但它不起作用......并且在函数的控制台上我得到 info_id 因为 None
没有事件定义的默认值 0......我做错了什么?
这是我的样品url
http://localhost:8000/account/bankcreate/1/
我都试过了
url(r'^bankcreate/(?:/(?P<info_id>[1-9]+)/)?/$'
和
url(r'^bankcreate/(?:/(?P<info_id>[1-9]+)/)?$'
但我遇到了这个错误
Page not found (404)
Request Method: GET
Request URL: http://localhost:8000/account/bankcreate/1/
Using the URLconf defined in paypal.urls, Django tried these URL patterns, in this order:
^$
^admin/
^account/ ^$ [name='account-home']
^account/ ^edit$ [name='account-edit']
^account/ ^email [name='account-email']
^account/ ^bankinfo [name='account-bank']
^account/ ^bankcreate/(?:/(?P<info_id>[1-9]+)/)?$ [name='account-bankcreate']
^account/ ^password [name='account-password']
^gateway/
^auth/
The current URL, account/bankcreate/1/, didn't match any of these.
您的正则表达式(第二个)中有一个额外的斜杠。
改变
url(r'^bankcreate/(?:/(?P<info_id>[1-9]+)/)?$'
至
url(r'^bankcreate/(?:(?P<info_id>[1-9]+)/)?$'
我有一个视图用于在我的数据库中插入/更新一个名为 BankAccounts
的 table ... 基本上如果 info_id
被传递给它的函数 edit/update
如果不是,它的默认值是 insert
操作
def bankcreate( requset , info_id = 0 ):
print(' -----> id is ' + str(info_id))
errors = []
default = None
if info_id is not None and info_id > 0 :
try:
default = BankAccounts.objects.get(id=info_id , user_id=requset.user.id)
except BankAccounts.DoesNotExist :
default = None
if requset.POST :
VALIDATIONRULES = {} # some rules here
data , errors = validation(requset , VALIDATIONRULES)
if not errors :
if info_id > 0 and default is not None:
ba = default
else :
ba = BankAccounts()
ba.bank_accnumber = data['bank_accnumber']
ba.bank_cartnumber = data['bank_cartnumber']
ba.bank_shabanumber = data['bank_shabanumber']
ba.bank_title = data['bank_title']
ba.user_id = requset.user.id
ba.save()
return redirect('account-bank')
else:
default = data
return render(requset , 'account/bankcreate-form.html' ,
{'default':default , 'errors':errors} )
因此,如您所见,无论是否使用 info_id,都应该可以访问该功能 这是我的 rules.py
urlpatterns = [
url(r'^$', views.index , name='account-home'),
url(r'^edit$', views.edit , name='account-edit'),
url(r'^bankinfo', views.bankinfo , name='account-bank'),
url(r'^bankcreate/(?:/(?P<info_id>[1-9]+)/)?', views.bankcreate , name='account-bankcreate'),
]
如你所见,我正在尝试在最后一行写一个可选参数
url(r'^bankcreate/(?:/(?P<info_id>[1-9]+)/)?', views.bankcreate , name='account-bankcreate'),
但它不起作用......并且在函数的控制台上我得到 info_id 因为 None
没有事件定义的默认值 0......我做错了什么?
这是我的样品url
http://localhost:8000/account/bankcreate/1/
我都试过了
url(r'^bankcreate/(?:/(?P<info_id>[1-9]+)/)?/$'
和
url(r'^bankcreate/(?:/(?P<info_id>[1-9]+)/)?$'
但我遇到了这个错误
Page not found (404)
Request Method: GET
Request URL: http://localhost:8000/account/bankcreate/1/
Using the URLconf defined in paypal.urls, Django tried these URL patterns, in this order:
^$
^admin/
^account/ ^$ [name='account-home']
^account/ ^edit$ [name='account-edit']
^account/ ^email [name='account-email']
^account/ ^bankinfo [name='account-bank']
^account/ ^bankcreate/(?:/(?P<info_id>[1-9]+)/)?$ [name='account-bankcreate']
^account/ ^password [name='account-password']
^gateway/
^auth/
The current URL, account/bankcreate/1/, didn't match any of these.
您的正则表达式(第二个)中有一个额外的斜杠。
改变
url(r'^bankcreate/(?:/(?P<info_id>[1-9]+)/)?$'
至
url(r'^bankcreate/(?:(?P<info_id>[1-9]+)/)?$'