Python Django模块、应用程序和导入问题-对象没有属性';表格';

Python Django模块、应用程序和导入问题-对象没有属性';表格';,python,django,Python,Django,我有一个注册表单,如果用户是访客,则需要为我网站的每个页面加载该表单。我认为最简单的方法是创建一个“注册”应用程序/模块,并在init.py中定义表单变量,因此它会在每个视图上自动启动,假设我导入了模块。但是,我在获取视图以查找表单变量时遇到了一些困难。“未定义全局名称‘表单’”下面是我的设置: 我有一个/signup/init.py和/signup/form.py文件 这是我的init.py from django import forms from signup.form import Si

我有一个注册表单,如果用户是访客,则需要为我网站的每个页面加载该表单。我认为最简单的方法是创建一个“注册”应用程序/模块,并在init.py中定义表单变量,因此它会在每个视图上自动启动,假设我导入了模块。但是,我在获取视图以查找表单变量时遇到了一些困难。“未定义全局名称‘表单’”下面是我的设置:

我有一个/signup/init.py和/signup/form.py文件

这是我的init.py

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中为已安装的应用程序添加注册,结果都是一样的