从Django url传递“start”会出现错误“start()只接受2个参数(给定1个)”

2024-06-20 15:02:52 发布

您现在位置:Python中文网/ 问答频道 /正文

不幸的是,我在Django中遇到了一个意外错误。 我有一个网址:

    urlpatterns = patterns('',
            url(r'^admin/', include(admin.site.urls)),
            url(r'', include('ads.urls',namespace="ads")),
    )
    urlpatterns += patterns('ads.search',
            url(r'^getsubcategories/$', 'getsubcategories', name="getsubcategories"),
            url(r'^anuncios/([\w\-]+)/$', 'anuncios_search', name="anuncios_search"),
            url(r'^([\w\-]+)/([\w\-]+)/$', 'search',name="search_text"),
            url(r'^([\w\-]+)/([\w\-]+)/([\w\-]+)/$', 'ads_details',name="ads_details"),
    )

当我将url称为“anuncios_search”时,这将适用于所有搜索模式accept“/anuncios/start/”,请参见下面的工作url:

示例:

1)/anuncios/avc/:这行得通。在

2)/anuncios/finds/:这行得通。在

3)/anuncios/开始日期/:这很有效。在

4)/anuncios/starts/:这行得通。在

5)/anuncios/start/:此url向我抛出错误:

^{pr2}$

我的视图.py是:

^{3}$

请帮我解决这个错误。在

提前谢谢


Tags: nameurlsearchincludeadmin错误detailsurls
2条回答

正如xecgr所说,必须有另一个视图或函数(名为start)以某种方式被导入和使用。可能是在你安装的应用程序中导入的其他模块中。。。也许有某种模式使用正则表达式并调用以匹配词命名的视图。。。谁知道呢。这肯定很奇怪。在

也许问题的出现是因为你在寻找这个模式的整体视图广告搜索从而导致这个意外的结果。你为什么不试试以下方法:

而不是:

urlpatterns += patterns('ads.search',
    url(r'^getsubcategories/$', 'getsubcategories', name="getsubcategories"),
    url(r'^anuncios/([\w\-]+)/$', 'anuncios_search', name="anuncios_search"),
)

尝试:

^{pr2}$

这将限制您的URL仅限于视图.py上面列出的文件。在

如果这还不能解决问题,那么请把你的全部进口商品贴在网址.py. 在

另一个可以尝试的方法是查找名为start的模式/视图。为此,您可以尝试:

pip install django-extensions

然后将django_extensions添加到已安装的应用程序中。然后使用以下命令列出项目中的所有URL及其视图:

python manage.py show_urls

或者,如果它们太多,并且“开始”视图确实存在于某个地方,则该方法应该有效:

python manage.py show_urls | grep start

我的猜测是您还有另一个urlpattern作为/anuncios/start/(不是当前的urls.py),并且start方法有两个参数。如果是这样,并且它的优先级高于当前使用regex的urlpattern,则会抛出错误。在

因此,要么删除该urlpattern,要么在您的def anuncios_search()中使用额外的代码处理其解析逻辑。在

编辑

要调试这个,请简化代码。在

  1. 检查如果将anuncios_search方法改为render一个文本字符串,会发生什么情况。如果它仍然抛出相同的错误,我们知道问题出在url解析上。
    • 您可能没有自己定义urlpattern,但这可能是您使用的某个插件来实现这一点。在这种情况下,如果您正在使用插件,请尝试逐个删除它们(如果可能)。在
  2. 如果没有,那么在anuncios_search方法的第一行使用import pdb; pdb.set_trace()。再提出一次请求,你就可以找到确切的例外地点了。在

编辑2-更多调查

我不确定您是否正在使用Django 1.5,但从其源代码来看,很明显视图中引发的异常通过中间件传递以获取响应,如果不是,则会引发相应的错误。在

在您的例子中,您使用的是代码

current_filters= {'current_category':None,'ads':ads_paginator(request,ads)}

我认为这可能是引发未处理异常的合理语句。在

相关问题 更多 >