2017-02-17 116 views
0

我是Python编程新手,想知道如何访问我在一个文件中声明的变量?我正在Django和有两个文件:如何在Python中访问类变量?

  1. forms.py

    class ContactForm(forms.Form): 
    
        full_name = forms.CharField(max_length=100) 
        email = forms.EmailField() 
        message = forms.CharField(max_length=1000) 
    
  2. views.py

    from .forms import ContactForm 
    
    def contact(request): 
    
        e = ContactForm() 
        toPrint = e.get(email) 
        print(toPrint) 
    

我只是测试它打印在终端上帮助我学习如何访问这些变量以在views.py中使用它们.py

+1

在这种情况下,您只需执行'e.email'。 – kojiro

回答

0

的意见,你通常会通过在进入表单中的数据,那么你可以像这样

def contact(request): 
    context = {} 
    if request.method == 'POST': 
     form = ContactForm(data=request.POST) 
     if form.is_valid(): 
      email = form.cleaned_data.get('email', '') 
      # do something with email here?? 
    else: 
     form = ContactForm() 
    context['form'] = form 
    return render(request, 'signup.html', context) 
0

编辑cleaned_data抓住它:正如评论指出,这个答案不工作django的具体情况,因为一些django魔术。但总的来说,这应该是正确的。

首先,您应该声明ContactForm类的__init__函数(构造函数)中的变量。然后,你将它存储self下:

class ContactForm(forms.Form): 
    def __init__(self): 
     super().__init__() 
     self.full_name = forms.CharField(max_length=100) 
     self.email = forms.EmailField() 
     self.message = forms.CharField(max_length=1000) 

在这两种情况下(如果保持这样的代码你拥有了它,或者你使用明确的构造函数),您访问的变量只是作为

e = ContactForm() 
to_print = e.email 
.... 
+0

虽然一般很好的建议,但它不适用于这种特殊情况。 Django表单在表单字段中使用了一些元类魔法,并且在'__init__'中设置字段可以打破魔法。相同的元类魔法意味着你不能简单地使用例如'form.email'。 – knbk

+0

@knbk我明白了。在我看来,OP缺少一些关于属性访问的基础知识,而不是django特有的。我会进行编辑以使您的评论清晰。 – Bendik

0
e = ContactForm() 

如果您的形式进行验证,您可以访问

e.cleaned_data.get('email') 
0

Django的形式使用所谓的元类。在这个特定情况下,这样做是捕获表单上定义的所有Field实例,并将它们放入名为declared_fields的字典中。你可以看到源代码here。您将访问原始字段ContactForm.declared_fields['email']

该表格复制declared_fields并将其放入fields属性中,以允许更改单个表单实例中的字段。然后,您就可以访问域如下:正如所说

e = ContactForm() 
e.fields['email'] 

别人,如果不是因为元类,你只用ContactForm.emaile.email