0

我想在 modelform 类中获取 url。我在 包含的 urlconf manager.urls 中看到没有任何模式。但是reverse_lazy函数不适用于我的情况。

我的情况:

captchahelperroot中的应用程序

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

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

验证码 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它是真的很丑……

4

2 回答 2

0

您正在调用该类,而不是您的 urls 文件中的 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")

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

于 2013-07-17T09:04:20.407 回答
0

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

urlpatterns = [
    url(r'^$', views.article_list),
]
于 2016-01-03T12:09:10.807 回答