2012-02-07 34 views
5

Sau khi thay đổi chức năng xem mà không cần chạy lại máy chủ và nhấn F5 để làm mới trang, Django sẽ không tải lại chế độ xem mới nhưng sử dụng chế độ xem trước đó. nhưng nếu bạn thay đổi mẫu, Django luôn sử dụng mẫu mới.Có thể tải lại chế độ xem mà không cần khởi động lại Django không?

Vì vậy, có cách nào để làm cho Django tải lại chế độ xem mỗi lần người dùng làm mới trang, tôi nghĩ rằng rất thuận tiện để phát triển để sửa đổi chức năng xem thường xuyên.

+0

Với máy chủ phát triển, mã python thường những thay đổi khởi động lại máy chủ tự động. Với một mẫu, nó luôn luôn chỉ đọc các tập tin vì vậy đó là một câu chuyện khác nhau. –

+0

Tôi không chắc tôi hiểu câu hỏi của bạn. Bạn đang chạy trang web Django của bạn mà không có máy chủ? Điều này có nghĩa là bạn đang chạy nó thông qua một phương pháp khác? Runserver nên nhận các thay đổi đối với bất kỳ tệp python nào được dự án sử dụng, nó sẽ mất vài giây. –

+0

Tôi chạy nó qua pydev, nó không tải lại mã thay đổi. vì vậy mỗi lần tôi thay đổi chức năng xem, tôi phải chạy lại máy chủ để tải lại mã đã thay đổi. làm cho việc lập trình chậm. – storm

Trả lời

9

Nếu bạn đang chạy django bằng máy chủ dev (./manage.py runserver) thì nó sẽ luôn tải lại khi phát hiện bất kỳ thay đổi mã nào. Điều này thậm chí còn hiệu quả hơn tải lại với mọi yêu cầu. Nếu bạn thực hiện thay đổi, nó sẽ tải lại khi cần.

Nếu bạn đang chạy một máy chủ sản xuất (nginx, apache, v.v.) và bạn muốn tải lại mã, sau đó bạn cần phải thêm gì đó vào mô-đun wsgi để phát hiện các thay đổi mã.

Mã tải lại với apache: http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode

Mã tải lại với uwsgi: http://projects.unbit.it/uwsgi/wiki/TipsAndTricks

+0

Tôi sử dụng eclipse + pydev để phát triển. Và chỉ cần sử dụng eclipse để runerver, và tôi thấy rằng nó không tải lại chức năng xem, nhưng tải lại tệp mẫu, vì vậy mỗi khi tôi thay đổi mã, tôi phải khởi động lại nó. có bất kỳ cài đặt nào trong setting.py để bật không? – storm

+1

Đây là vấn đề với PyDev. Theo tôi biết không có một cách để làm cho nó làm việc tải lại (điều này có thể đã thay đổi kể từ lần cuối cùng tôi sử dụng nó), tôi đã luôn luôn kết thúc chạy runerver thông qua thiết bị đầu cuối để thay thế. –

+1

Yea bất kể tôi đang sử dụng IDE nào, tôi luôn chạy máy chủ lưu trữ trong thiết bị đầu cuối. – jdi

2

Đó là một vấn đề được biết đến với PyDev. Tôi sẽ đề nghị chạy máy chủ từ thiết bị đầu cuối/cmd. cd vào thư mục dự án của bạn, nơi manage.py có mặt và chạy các máy chủ sử dụng

python manage.py runserver

Bạn không cần phải chạy dự án từ menu nhật thực. Bất kỳ thay đổi nào được thực hiện trong nhật thực sẽ được phản ánh ngay khi chúng được tạo.

0

Tôi nhận thấy đó là cài đặt trong cấu hình chạy pyDev. Tôi tự hỏi tại sao nhưng có vẻ như --noreload được định cấu hình theo mặc định. Vì vậy, tôi chỉnh sửa đối số của cài đặt chạy và bây giờ máy chủ cũng đang tải lại khi chỉnh sửa chế độ xem.

+0

- tải trước được đặt theo mặc định vì cách thực hiện tải lại có thể gây ra sự cố với các điểm ngắt và gỡ lỗi – dalore

2

Nếu bạn đang chạy Django dưới dạng ứng dụng WSGI ở chế độ daemon, bạn chỉ cần chạm vào số wsgi.py cho trang web của mình và ứng dụng sẽ tải lại ứng dụng vào lần tiếp theo có yêu cầu. (Vì vậy, không cần cho bất kỳ tùy chọn đặc biệt).

+0

Điều này có thể không trả lời được câu hỏi ban đầu nhưng nó đã trả lời câu hỏi của tôi! – teewuane

+0

Cảm ơn +1, chạm vào wsgi.py rất hữu ích. –

0

Hãy thử sử dụng gunicorn hoặc nginx như chạy máy chủ ... Họ không khởi động lại trên mã thay đổi thử gõ

gunicorn --bind 0.0.0.0:8080 app.wsgi:application

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