Django URL错误
错误信息:
在尝试获取名为 'charges_report' 的链接时,使用了参数 '(u'rtcl', datetime.date(2012, 1, 3), datetime.date(2012, 1, 4), u'')' 和关键字参数 '{}',但是没有找到对应的链接。
这个问题出现在我的 urls.py 文件中。
url(r'^charges_report/(?P<company_name>[\s\w\d-]+)/(?P<start_date>[\s\w\d-]+) /(?P<close_date>[\s\w\d-]+)/(?P<batch_no>[\s\w\d-]+)/$',
'admin.reports.views.charges_report',
name='charges_report'),
还有在我的表单视图中,当用户提交表单时就会出现这个错误。也就是说,在处理 request.POST 的时候,下面是表单提交的代码:
if request.POST:
company_form = CompanyForm(request.POST, request=request)
if company_form.is_valid():
company_name = company_form.cleaned_data['company_name']
start_date = company_form.cleaned_data['start_date']
close_date = company_form.cleaned_data['close_date']
batch_no = company_form.cleaned_data['batch_no']
#if 'immigration_charges' in request.POST:
return HttpResponseRedirect(reverse('charges_report',args=[company_name, start_date, close_date, batch_no]))
在视图中:
def charges_report(request, company_name, start_date, close_date, batch_no=None,):
3 个回答
0
试着用一个关键字参数字典来代替位置参数。
0
Django的URL调度文档提醒我们:
- “如果在导入任何视图函数时出现错误,即使你并不是想要反向调用那个视图函数,也会导致reverse()出错。”
- “确保你在URL配置文件中引用的所有视图都存在,并且可以正确导入。”
- “不要包含那些你还没有编写的视图的引用。”
这些问题中的一个可能就是你的问题所在。
0
你的网址正在使用关键字参数,但你在reverse
中传递的是位置参数。
试试这样:
kwargs = dict()
kwargs['company_name'] = company_name
kwargs['start_date'] = start_date
kwargs['close_date'] = close_date
kwargs['batch_no'] = batch_no
return HttpResponse(reverse('charges_report',kwargs=kwargs))
你还需要把日期格式化,以符合你网址模式中的正则表达式。目前你传递的是字面字符串datetime.date(2012, 1, 3)
作为start_date
。
把start_date
(和close_date
)改成符合你正则表达式的格式,像这样:
kwargs['start_date'] = "{}".format(start_date)
kwargs['close_date'] = "{}".format(close_date)