2012-02-29 36 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只导入目前的命名空间,而每个模块都是它自己的命名空间;其他模块中的导入不会影响当前的名称空间,反之亦然。