Django URL错误

1 投票
3 回答
979 浏览
提问于 2025-04-17 10:52

错误信息:

在尝试获取名为 '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)

撰写回答