我想在 modelform 类中获取 url。我在
包含的 urlconf manager.urls 中看到没有任何模式。但是reverse_lazy函数不适用于我的情况。
我的情况:
captchahelper是root中的应用程序。
根 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
它是真的很丑……