2012-02-29 56 views
1

聲明:我是新來的蟒蛇,但有drupal編程經驗初學者:python命名空間碰撞?

我正在閱讀Django權威指南(http://www.djangobook.com/en/1.0/chapter07/)。發行後

python manage.py startapp books 

python創建書包裏面的views.py。後來在本教程中,我們輸入如下成views.py文件:

# Create your forms here. 
from django import forms 
from django.forms import form_for_model 
from models import Publisher 

PublisherForm = forms.form_for_model(Publisher) 

TOPIC_CHOICES = (
    ('general', 'General enquiry'), 
    ('bug', 'Bug report'), 
    ('suggestion', 'Suggestion'), 
) 

class ContactForm(forms.Form): 
    topic = forms.ChoiceField(choices=TOPIC_CHOICES) 
    message = forms.CharField(widget=forms.Textarea()) 
    sender = forms.EmailField(required=False) 

    def clean_message(self): 
     message = self.cleaned_data.get('message', '') 
     num_words = len(message.split()) 
     if num_words < 4: 
      raise forms.ValidationError("Not enough words!") 
     return 

除非我輸入一些錯誤或誤解的東西(或可能),我們現在(貌似)具有形式之間的衝突(書籍/ forms.py)和django表單。所以,這確實Python的參考上面

message = forms.CharField(widget=forms.Textarea()) 
+0

謝謝兩位! form_for_model現在是ModelForm,在本教程中的用法不同。 – 2012-02-29 19:52:48

+0

不要忘記[接受答案](http://meta.stackexchange.com/a/5235/176476);) – 2012-02-29 20:01:12

回答

3

本聲明:

from django.forms import form_for_model 

真的只拉名form_for_model至模塊全局命名空間,已經存在名稱forms不受影響。即使是這樣:

import django.forms 

不會是一個問題,因爲它不僅使在其完全合格的形式提供名稱,django.forms(這是unambigios,不與forms衝突)。

0

與PHP不同,Python只導入目前的命名空間,而每個模塊都是它自己的命名空間;其他模塊中的導入不會影響當前的名稱空間,反之亦然。