2017-02-17 115 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