初学者:python命名空间碰撞?
问题描述:
声明:我是新来的蟒蛇,但有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())
答
本声明:
from django.forms import form_for_model
真的只拉名form_for_model
至模块全局命名空间,已经存在名称forms
不受影响。即使是这样:
import django.forms
不会是一个问题,因为它不仅使在其完全合格的形式提供名称,django.forms
(这是unambigios,不与forms
冲突)。
答
与PHP不同,Python只导入目前的命名空间,而每个模块都是它自己的命名空间;其他模块中的导入不会影响当前的名称空间,反之亦然。
答
虽然这个例子不会导致如指出的冲突,如果有,您可以使用from ____ import ___ as ___
来指定自己的导入名称冲突
谢谢两位! form_for_model现在是ModelForm,在本教程中的用法不同。 – 2012-02-29 19:52:48
不要忘记[接受答案](http://meta.stackexchange.com/a/5235/176476);) – 2012-02-29 20:01:12