новичок: столкновение пространства имен Python? - PullRequest
1 голос
/ 29 февраля 2012

Отказ от ответственности: я новичок в python, но имею опыт программирования drupal

Я читаю Полное руководство по Django (http://www.djangobook.com/en/1.0/chapter07/). После издания

python manage.py startapp books

python создает пакет books с 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

Если я не набрал что-то неправильно или неправильно что-то понял (или, скорее всего), у нас сейчас (казалось бы) столкновение между формами (books / forms.py) и формами django. Итак, на что ссылается Python выше в

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

Ответы [ 3 ]

3 голосов
/ 29 февраля 2012

Этот оператор:

from django.forms import form_for_model

Действительно только вытягивает имя form_for_model в глобальное пространство имен модуля, на уже существующее имя forms это не влияет.Даже это:

import django.forms

не будет проблемой, потому что это делает имя доступным только в его полной форме, django.forms (что является недвусмысленным и не конфликтует с forms).

0 голосов
/ 29 февраля 2012

Хотя этот пример не вызывает конфликт, как указано, если есть конфликт, вы можете использовать from ____ import ___ as ___, чтобы указать собственное имя для импорта

http://docs.python.org/reference/simple_stmts.html#import

0 голосов
/ 29 февраля 2012

В отличие от PHP, Python импортирует только в текущее пространство имен, и каждый модуль имеет свое собственное пространство имен; импорт в другие модули не влияет на текущее пространство имен, и наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...