[英]beginner: python namespace collision?
免责声明:我是python新手,但具有drupal编程经验
我正在阅读Django的权威指南(http://www.djangobook.com/en/1.0/chapter07/)。 发出后
python manage.py startapp books
python使用views.py创建books包。 在本教程的后面,我们将以下内容输入到该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
除非我键入了错误的内容或误解了某些内容(可能是这样),否则我们现在(貌似)在表单(books / 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 ___
来指定您自己的导入名称
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.