【问题标题】:The included urlconf xxxx.urls doesn't have any patterns in it包含的 urlconf xxxx.urls 中没有任何模式
【发布时间】:2013-07-15 17:38:48
【问题描述】:

我想在 modelform 类中获取一个 url。 我在 The included urlconf manager.urls doesn't have any patterns in it。但是 reverse_lazy 功能不适用于我的情况。

我的情况:

captchahelperroot 中的 app

root urlpatterns(根项目下的urls.py):

urlpatterns = patterns("",
    .....
    # captcha
    url(r'^captcha/', include('captchahelper.urls')),
    .....
}

captcha urlpatterns(captchahelper 项目下的urls.py):

urlpatterns = patterns('',
    url(r'^$', views.captcha , name="views_captcha"),
    url(r'^refresh/$', views.refresh , name="views_refresh_captcha"),
)


captchahelper 项目下的view.py

def captcha(request):
    .....
    return HttpResponse(captcha.gen_img_by_code(code),'image/jpeg')

得到:

class CaptchaForm(forms.ModelForm):
    .....
    captcha = Captcha()
    encoded = captcha.get_encrypt_code()
    captcha_image = urlresolvers.reverse_lazy('views_captcha') + '?encoded='+encoded
    .....
    def clean_captcha_text(self):
        ....


结果错误:
/account/signup/ 是当前url(也包含在root.urls中),当访问者查看这个页面时,上面的类会在相应的视图函数中初始化。

ImproperlyConfigured at /account/signup/
The included urlconf root.urls doesn't have any patterns in it


D:\Python27\lib\site-packages\django\core\urlresolvers.py in reverse
    return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) ...
 ▼ Local vars
    Variable    Value
    ns_pattern  
    ''
    viewname    
    'views_captcha'
    args    
    []
    current_app 
    None
    prefix  
    u'/'
    parts   
    ['views_captcha']
    resolver    
    <RegexURLResolver root.urls (None:None) ^/>
    kwargs  
    {}
    path    
    []
    resolved_path   
    []
    urlconf 
    'root.urls'
    view    
    'views_captcha'

我只是觉得 django 太复杂了,因为我来自 ASP MVC3。我可以很容易地从 MVC3 中的 Url.Action("CaptchaController", "CaptchaView", new { encoded = "encoded"}) 之类的语句中生成一个带有查询字符串的 url。但是如果我想在 django 中生成一个带有查询字符串的 url,则代码将是reverse('captcha') + '?encoded=' + encoded。真的很难看....

【问题讨论】:

    标签: python django


    【解决方案1】:

    您调用的是类,而不是 urls 文件中的 def 方法本身。您的项目似乎有点奇怪,因为大多数文件都有 *.py 结尾,但这是我已经在使用的项目中的一个示例:

    urls.py
    ...
    url(r'^getCustomerData/$', views.getCustomerData),
    ...
    

    在`views.py中,

    from app.models import Customer
    
    def getCustomerData(request):
    //process and return
    

    所以对你来说,我建议从

    更改你的 url 解析器
    url(r'^$', views.captcha , name="views_captcha"),
    url(r'^refresh/$', views.refresh , name="views_refresh_captcha")
    

    url(r'^$', views.captcha.CAPTCHA_HANDLER_DEF , name="views_captcha"),
    url(r'^refresh/$', views.captcha.refresh , name="views_refresh_captcha")
    

    并在验证码中定义这两个函数。

    【讨论】:

    • views.captcha是我的视图函数,root.urls是根项目下的urls.py
    • 嗯。您是从网址/account/signup/ 拨打captcha 吗?如果是这样,您需要在 captchahelper 中添加该 url。
    • 另外,您是否将captchahelper 定义为settings.py 中的已安装应用程序?
    • 流程是:/account/signup/会调用signup查看。 signup视图实例化CaptchaForm。然后reverseCaptchaForm init时执行。当然我已经将captchahelper添加到APP_LIST。我认为这与查看url无关,因为路由已经定义了必须可以被检索。
    • 您是否尝试在验证码网址路径中添加/account/signup/?如果您在注册视图中调用captcha,那么您的网址是/accounts/signup/captcha/
    【解决方案2】:

    确保您的 urls.py 文件中包含 urlpatterns 并且拼写正确。

    urlpatterns = [
        url(r'^$', views.article_list),
    ]
    

    【讨论】:

      猜你喜欢
      • 2011-09-22
      • 2014-07-03
      • 2011-03-01
      • 2013-07-05
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      相关资源
      最近更新 更多