Python Django模块、应用程序和导入问题-对象没有属性';表格';
我有一个注册表单,如果用户是访客,则需要为我网站的每个页面加载该表单。我认为最简单的方法是创建一个“注册”应用程序/模块,并在init.py中定义表单变量,因此它会在每个视图上自动启动,假设我导入了模块。但是,我在获取视图以查找表单变量时遇到了一些困难。“未定义全局名称‘表单’”下面是我的设置: 我有一个/signup/init.py和/signup/form.py文件 这是我的init.pyPython Django模块、应用程序和导入问题-对象没有属性';表格';,python,django,Python,Django,我有一个注册表单,如果用户是访客,则需要为我网站的每个页面加载该表单。我认为最简单的方法是创建一个“注册”应用程序/模块,并在init.py中定义表单变量,因此它会在每个视图上自动启动,假设我导入了模块。但是,我在获取视图以查找表单变量时遇到了一些困难。“未定义全局名称‘表单’”下面是我的设置: 我有一个/signup/init.py和/signup/form.py文件 这是我的init.py from django import forms from signup.form import Si
from django import forms
from signup.form import SignUpForm
form = SignupForm()
这是我的表格
class SignupForm(forms.Form):
fullname = forms.CharField(min_length=3, max_length=25, initial='name', error_messages={'required': 'A unique username is required.', 'min_length': 'Your username must contain at least 3 characters.'})
username = forms.CharField(min_length=3, max_length=25, initial='choose a username', error_messages={'required': 'A unique username is required.', 'min_length': 'Your username must contain at least 3 characters.'})
password = forms.CharField(min_length=7, initial='choose a password', error_messages={'required': 'Please enter a password.','min_length': 'Your password must contain at least 7 characters.'})
email = forms.EmailField(initial='e-mail address', error_messages={'required': 'Please enter a valid email address.', 'invalid': 'Please enter a valid email address.'})
find_me = forms.BooleanField(initial=True, required=False)
tos = forms.BooleanField(error_messages={'required': 'You must accept our Terms of Service.'})
我正在尝试从我的/views/index.py文件加载这些文件:
from django.http import HttpResponse
from pymongo import *
from user import *
import mongo
from django.shortcuts import render_to_response
from django.template import RequestContext, loader
import signup
#index view
def index(request):
return render_to_response('index.html',
{'form': signup.form},
context_instance=RequestContext(request),
)
我删除了index.py中不相关的代码。。。但基本上。。(我可能会使用if-else for return语句只返回“form”:当用户未注册时返回表单)
我是不是完全错了?有人介意告诉我我做错了什么吗
::编辑::
另外,我注意到我在报税表中没有signup.form,但这仍然会抛出一个错误
AttributeError at /
'module' object has no attribute 'form'
错误。我更改了上面的代码,以适应您应该使用来自注册导入表单的
或来自注册导入的*
使表单
变量在您的views.py中可用。如果您执行导入注册
操作,它将导入名称空间为注册
的模块,并对需要执行注册的表单进行寻址。表单
您应该使用从注册导入表单
或从注册导入*
使表单
变量在视图中可用。如果您执行import signup
操作,它将导入名称空间为signup
的模块,并对需要执行注册的表单进行寻址。表单
我不确定您通过将其分配给标识符来尝试执行什么操作
我会这样做:
#init.py:
from django import forms
from signup.form import SignUpForm
#index view
def index(request):
return render_to_response('index.html',
{'form': signup.SignUpForm()},
context_instance=RequestContext(request),
)
或
更新
将form.py更改为:
class SignUpForm(forms.Form):
而不是:
class SignupForm(forms.Form):
我不确定通过将其分配给标识符,您想做什么
我会这样做:
#init.py:
from django import forms
from signup.form import SignUpForm
#index view
def index(request):
return render_to_response('index.html',
{'form': signup.SignUpForm()},
context_instance=RequestContext(request),
)
或
更新
将form.py更改为:
class SignUpForm(forms.Form):
而不是:
class SignupForm(forms.Form):
我只想指出,你这样做是一个非常糟糕的主意。每个请求中都有一个表单实例:这总是很危险的,可能会导致请求之间的信息泄漏。不要这样做
相反,使用Django必须为您执行的内置机制:。在signup/form.py中,定义一个简单的函数:
def signup_form(request):
return SignupForm()
并将其添加到settings.py中的TEMPLATE\u CONTEXT\u PROCESSORS
:
'signup.form.signup_form',
我只想指出,你这样做是一个非常糟糕的主意。每个请求中都有一个表单实例:这总是很危险的,可能会导致请求之间的信息泄漏。不要这样做
相反,使用Django必须为您执行的内置机制:。在signup/form.py中,定义一个简单的函数:
def signup_form(request):
return SignupForm()
并将其添加到settings.py中的TEMPLATE\u CONTEXT\u PROCESSORS
:
'signup.form.signup_form',
是的,我意识到在我贴了这个。。我尝试了signup.form,它给了我AttributeError at/'module'对象没有属性'form'。另一个问题可能是表单的名称重叠。因为首先你会看到在注册中有一个form.py(signup.form
)。然后,通过init.py中的form=SignupForm()
来“覆盖”此表单变量。所以你用同一个名字来表示不同的事情。很有可能这就是第二次追踪的原因。它无法正确解析表单
。请尝试重命名一个表单
变量(要么是注册.form
模块,要么是init.py中的表单
引用)。然后查看是否仍然存在此问题。将变量更改为regform,但仍然不起作用。我正在为我的mongo模块做同样的事情,这是可行的,所以我不知道为什么会出问题。这和这之间唯一的区别是,我正在调用它上面的其他对象。这听起来很奇怪,但可能是因为python路径中有两个注册
模块。你能不能检查一下你是否导入了正确的模块(例如,在index.py
中的视图中使用print os.path.dirname(signup.\uuu file\uuuuu)
)。是的,我发布了这个之后才意识到。。我尝试了signup.form,它给了我AttributeError at/'module'对象没有属性'form'。另一个问题可能是表单的名称重叠。因为首先你会看到在注册中有一个form.py(signup.form
)。然后,通过init.py中的form=SignupForm()
来“覆盖”此表单变量。所以你用同一个名字来表示不同的事情。很有可能这就是第二次追踪的原因。它无法正确解析表单
。请尝试重命名一个表单
变量(要么是注册.form
模块,要么是init.py中的表单
引用)。然后查看是否仍然存在此问题。将变量更改为regform,但仍然不起作用。我正在为我的mongo模块做同样的事情,这是可行的,所以我不知道为什么会出问题。这和这之间唯一的区别是,我正在调用它上面的其他对象。这听起来很奇怪,但可能是因为python路径中有两个注册
模块。您是否可以检查一下您是否导入了正确的模块(例如,在index.py
中的视图中使用print os.path.dirname(signup.\uuuu file\uuuuuu)
)。这方面有一些粗略的进展。。。在尝试导入注册中的任何内容时,我得到“没有名为form的模块”。我甚至尝试在settings.py中为已安装的应用程序添加注册,结果都是一样的