2013-04-07 27 views
5

Tôi đang chạy Django 1.5.1, Python 2.7.2 và IPython 0.13.2. Nếu tôi làm "trăn vỏ ./manage.py" từ bên trong thư mục dự án Django của tôi, tôi nhận được lỗi sau:Nhận TênError với Django 1.5 và IPython

from django import forms 
class CommentForm(forms.Form): 
    name = forms.CharField() 

NameError: name 'forms' is not defined. 

Tôi biết hình thức được định nghĩa là tôi có thể nhìn thấy nó khi nó làm "dir (mẫu đính kèm) ". Tôi đã nhận thấy rằng lỗi này chỉ xảy ra khi tôi đang chạy iPython trong REPL. Nếu tôi bắt đầu REPL và chỉ sử dụng trình thông dịch Python cũ, lỗi thì không xảy ra lỗi.

Có ai khác đã gặp sự cố này không? Nếu vậy, bạn có biết tại sao nó xảy ra và có hay không có một công việc xung quanh?

Tôi nên thêm rằng tôi đã gặp sự cố trong quá khứ tạo các lớp trong REPL cho đến khi tôi tạo một lớp meta trong lớp và xác định biến "app_label". Điều đó không tạo nên sự khác biệt trong tình huống này.

Cảm ơn.

+0

Bạn có tệp có tên 'forms.py' bằng bất kỳ cơ hội nào trong thư mục dự án của mình không? – eandersson

+0

Django có thói quen nuốt các trường hợp ngoại lệ hợp pháp và cải thiện các trường hợp chung chung. Tôi sẽ có một cái nhìn tại mã và thậm chí sửa đổi nó để xem những gì ngoại lệ thực tế được nâng lên có thể được. – aychedee

+0

eandersson, Không, tôi không có tệp forms.py trong dự án nhưng việc thêm một tệp không khắc phục được sự cố. Cám ơn vì sự gợi ý. – William

Trả lời

8

django 1.5 không khởi động đúng IPython. Đây là fixed in master, nhưng bản sửa lỗi không được chuyển thành 1.5.1. Nếu bạn áp dụng thủ công bản vá đó cho lõi/quản lý/lệnh/shell.py, IPython sẽ hoạt động như mong đợi.

+1

Tôi đã vá shell.py và đã khắc phục được sự cố. Cảm ơn nhiều. – William

+0

Cảm ơn bạn vì điều này! Một lưu ý cho các bản vá lỗi khỉ khác: Trong phiên bản iPython của tôi ít nhất, tôi nhận được cảnh báo không dùng nữa đối với gói 'giao diện người dùng'. Bạn có thể làm cho cảnh báo đó biến mất bằng cách loại bỏ lớp 'frontend': từ IPython.terminal.ipapp import TerminalIPythonApp thay vì từ IPython.frontend.terminal.ipapp import TerminalIPythonApp –

Các vấn đề liên quan