2013-07-17 21 views
0

我想要在modelform类中获取url。我看过 The included urlconf manager.urls doesn't have any patterns in it。但reverse_lazy功能不适用于我的情况。
包含的urlconf xxxx.urls中没有任何模式

我的情况下:

captchahelper应用

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

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

验证码URL模式(下captchahelper项目urls.py):

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


图。 py下captchahelper项目

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): 
     .... 


转出错误:
/帐号/注册/是当前的URL(也包括root.urls),当访问者浏览该页面,上面的类将在相应的view函数中被init初始化。

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.I可以很容易从像MVC3.But Url.Action("CaptchaController", "CaptchaView", new { encoded = "encoded"})一份声明中生成一个查询字符串URL如果我想生成在Django查询字符串的URL ,代码将是reverse('captcha') + '?encoded=' + encoded。它真的很丑....

回答

0

您正在调用该类,而不是您的url文件中的def方法本身。你的项目似乎有点奇怪,因为大多数文件有一个*.py的结局,但这里是从我已经使用项目的例子:

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

和`views.py,

from app.models import Customer 

def getCustomerData(request): 
//process and return 

所以对你来说,我建议从

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") 

并在captcha中定义这两个函数。

+0

'views。views。captcha'是我的查看函数,'root.urls'是urls.py根目录下的项目 – Mithril

+0

嗯。你是从URL'/ account/signup /'调用'captcha'吗?如果是这样,您需要在captchahelper中添加该网址。 – Jason

+0

另外,你有'captchahelper'定义为'settings.py'中安装的应用程序吗? – Jason

0

确保你的urls.py文件中有urlpatterns并且拼写正确。

urlpatterns = [ 
    url(r'^$', views.article_list), 
] 
相关问题