Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在django表单中使用reverse()_Python_Django_Django Forms - Fatal编程技术网

Python 在django表单中使用reverse()

Python 在django表单中使用reverse(),python,django,django-forms,Python,Django,Django Forms,我试图在自定义小部件的django表单定义中使用django函数,但出现错误: ImproperlyConfigured The included urlconf urls doesn't have any patterns in it 代码如下: class WorkForm(forms.Form): # ... category = forms.ChoiceField( required=True, label=_('Category'),

我试图在自定义小部件的django表单定义中使用django函数,但出现错误:

ImproperlyConfigured
The included urlconf urls doesn't have any patterns in it
代码如下:

class WorkForm(forms.Form):
    # ...
    category = forms.ChoiceField(
        required=True,
        label=_('Category'),
        help_text=_('Select most appropriate category for your work.')
    )
    subcategory = forms.ChoiceField(
        widget=DependantChoiceWidget(
            default_value=_('Select category first'),
            data_source_url=reverse('works-json-categories'),
            # data_source_url='', -- it works this way
            depends_on='category_id'
        ),
        required=True,
        label=_('SubCategory'),
        help_text=_('Which subcategory suits your work best.')
    )
我很确定,我的“works.url”配置正确,因为所有其他页面都按预期工作

我不能在表单定义中使用
reverse()
有什么原因吗?这与代码何时运行有关吗?有没有办法解决这个问题,或者这里唯一的选择就是硬编码URL

以下是完整的错误转储:

Environment:

Request Method: GET
Request URL: http://127.0.0.1:8000/works/add?category=1&subcategory=1

Django Version: 1.4 pre-alpha
Python Version: 2.7.1
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'django.contrib.admindocs',
 'social_auth',
 'sorl.thumbnail',
 'helpers',
 'users',
 'works',
 'debug_toolbar']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.transaction.TransactionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'debug_toolbar.middleware.DebugToolbarMiddleware')


Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
  89.                     response = middleware_method(request)
File "/usr/local/lib/python2.7/dist-packages/django/middleware/common.py" in process_request
  67.             if (not _is_valid_path(request.path_info, urlconf) and
File "/usr/local/lib/python2.7/dist-packages/django/middleware/common.py" in _is_valid_path
  164.         urlresolvers.resolve(path, urlconf)
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py" in resolve
  416.     return get_resolver(urlconf).resolve(path)
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py" in resolve
  298.             for pattern in self.url_patterns:
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py" in url_patterns
  328.         patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py" in urlconf_module
  323.             self._urlconf_module = import_module(self.urlconf_name)
File "/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py" in import_module
  35.     __import__(name)
File "/var/www/megenius/trunk/urls.py" in <module>
  27.     url(r'^works/', include('works.urls')),
File "/usr/local/lib/python2.7/dist-packages/django/conf/urls/__init__.py" in include
  24.         urlconf_module = import_module(urlconf_module)
File "/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py" in import_module
  35.     __import__(name)
File "/var/www/megenius/trunk/works/urls.py" in <module>
  2. from works.views import *
File "/var/www/megenius/trunk/works/views.py" in <module>
  9. from works.forms import WorkForm
File "/var/www/megenius/trunk/works/forms.py" in <module>
  10. class WorkForm(forms.Form):
File "/var/www/megenius/trunk/works/forms.py" in WorkForm
  31.             data_source_url=reverse('works-json-categories'),
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py" in reverse
  473.                       (prefix, resolver.reverse(view, *args, **kwargs)))
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py" in reverse
  360.         possibilities = self.reverse_dict.getlist(lookup_view)
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py" in reverse_dict
  276.             self._populate()
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py" in _populate
  242.         for pattern in reversed(self.url_patterns):
File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py" in url_patterns
  332.             raise ImproperlyConfigured("The included urlconf %s doesn't have any patterns in it" % self.urlconf_name)

Exception Type: ImproperlyConfigured at /works/add
Exception Value: The included urlconf urls doesn't have any patterns in it
环境:
请求方法:获取
请求URL:http://127.0.0.1:8000/works/add?category=1&subcategory=1
Django版本:1.4 alpha之前
Python版本:2.7.1
已安装的应用程序:
['django.contrib.auth',
“django.contrib.contenttypes”,
“django.contrib.sessions”,
“django.contrib.sites”,
“django.contrib.messages”,
“django.contrib.staticfiles”,
“django.contrib.admin”,
“django.contrib.admindocs”,
“社会授权”,
“Soll.缩略图”,
“助手”,
“用户”,
“工作”,
“调试工具条”]
已安装的中间件:
('django.middleware.common.CommonMiddleware',
“django.contrib.sessions.middleware.SessionMiddleware”,
'django.middleware.transaction.TransactionMiddleware',
“django.middleware.csrf.CsrfViewMiddleware”,
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'debug_toolbar.middleware.debugtoolbar middleware')
回溯:
get_响应中的文件“/usr/local/lib/python2.7/dist packages/django/core/handlers/base.py”
89响应=中间件\方法(请求)
进程请求中的文件“/usr/local/lib/python2.7/dist packages/django/middleware/common.py”
67if(not)是有效路径(request.path\u info,urlconf)和
文件“/usr/local/lib/python2.7/dist-packages/django/middleware/common.py”位于有效路径中
164.URLColvers.resolve(路径,urlconf)
解析中的文件“/usr/local/lib/python2.7/dist packages/django/core/urlresolvers.py”
返回get_解析器(urlconf).resolve(path)
解析中的文件“/usr/local/lib/python2.7/dist packages/django/core/urlresolvers.py”
298.对于self.url_模式中的模式:
url_模式中的文件“/usr/local/lib/python2.7/dist packages/django/core/urlresolvers.py”
328.patterns=getattr(self.urlconf_模块,“urlpatterns”,self.urlconf_模块)
urlconf_模块中的文件“/usr/local/lib/python2.7/dist packages/django/core/urlresolvers.py”
323.self.\u urlconf\u module=import\u module(self.urlconf\u名称)
导入模块中的文件“/usr/local/lib/python2.7/dist packages/django/utils/importlib.py”
35.进口(名称)
文件“/var/www/megenius/trunk/url.py”
27.url(r'^works/',包括('works.url'),
include中的文件“/usr/local/lib/python2.7/dist-packages/django/conf/url/__-init__;u.py”
24.urlconf_模块=导入_模块(urlconf_模块)
导入模块中的文件“/usr/local/lib/python2.7/dist packages/django/utils/importlib.py”
35.进口(名称)
文件“/var/www/megenius/trunk/works/url.py”
2.从works.View导入*
文件“/var/www/megenius/trunk/works/views.py”
9.从works.forms导入工作表单
文件“/var/www/megenius/trunk/works/forms.py”
10.班级工作表(forms.Form):
WorkForm中的文件“/var/www/megenius/trunk/works/forms.py”
31.数据来源url=reverse('works-json-categories'),
文件“/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py”的格式相反
473.(前缀,解析器。反向(视图,*args,**kwargs)))
文件“/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py”的格式相反
360可能性=self.reverse\u dict.getlist(查找视图)
文件“/usr/local/lib/python2.7/dist packages/django/core/urlresolvers.py”,格式相反
276自我.()
文件“/usr/local/lib/python2.7/dist packages/django/core/urlresolvers.py”在
242对于反向模式(self.url\u模式):
url_模式中的文件“/usr/local/lib/python2.7/dist packages/django/core/urlresolvers.py”
332raise配置不当(“包含的urlconf%s中没有任何模式”%self.urlconf\u name)
异常类型:在/works/add处配置不正确
异常值:包含的urlconf URL中没有任何模式

问题可能是表单是在加载URL之前定义的

Django1.4将有一个可以解决这个问题的特性。您可以自己在项目中实现它(请参阅)

或者,您可以在表单
\uuuu init\uuu
方法中设置小部件。然后,在加载URL后,在创建表单时发生反向调用

class WorkForm(forms.Form):
    # ...
    subcategory = forms.ChoiceField(
        required=True,
        label=_('SubCategory'),
        help_text=_('Which subcategory suits your work best.')
    )
    def __init__(self, *args, **kwargs):
        super(WorkForm, self).__init__(*args, **kwargs)
        self.fields['subcategory'].widget=DependantChoiceWidget(
            default_value=_('Select category first'),
            data_source_url=reverse('works-json-categories'),
            depends_on='category_id'
        ),

您的反向字符串不应该有下划线而不是破折号吗?如果它们是命名url模式,则名称可以包含破折号。话虽如此,我更喜欢在我的url模式名称中使用下划线。我使用的是django 1.4 aplha,所以
reverse\u lazy
对我来说很好。非常感谢。对!
reverse\u lazy()
完全节省了我的时间。