2012-10-25 23 views
7

Tôi khá khó khăn về điều này! Tôi đang viết một chế độ xem Django đọc dữ liệu từ cơ sở dữ liệu bên ngoài. Để làm điều này, tôi đang sử dụng thư viện MySQLdb chuẩn. Bây giờ, để tải dữ liệu, tôi phải thực hiện một truy vấn rất dài và phức tạp. Tôi có thể mã cứng truy vấn đó trong quan điểm của tôi và nó hoạt động tốt. Nhưng tôi nghĩ điều đó không thực tế; Tôi muốn có thể thay đổi truy vấn trong tương lai, vì vậy tôi cố tải câu lệnh từ một tệp văn bản. Vấn đề của tôi là tôi không biết nơi lưu trữ và cách mở tệp đó. Bất cứ nơi nào tôi làm, tôi nhận được lỗi "Không có tệp hoặc thư mục như vậy". Ngay cả khi lưu nó trong cùng một thư mục hơn mã của chế độ xem không thành công.Đọc một tập tin địa phương ở django

Lưu ý rằng đây không phải là tệp được tải lên; nó chỉ là một tập tin bên ngoài hoàn thành mã của tôi. Bất kỳ ý tưởng nào? Cảm ơn bạn trước!

+0

Vâng, thực sự tôi đã cố gắng đặt nó vào cùng một direcotry như mã của khung nhìn và hàm open() bình thường. Vì nó đã thất bại, tôi đã cố gắng tìm một số thông tin, nhưng tất cả những gì tôi đã thử thất bại (IE: đặt nó vào thư mục con "tĩnh" của ứng dụng của tôi). Một con đường tuyệt đối sẽ hoạt động, nhưng tôi vẫn muốn linh hoạt hơn – fenomenoxp

Trả lời

18

Giữ tệp trong gốc dự án django và thêm tệp sau vào tệp settings.py.

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) 

Sau đó, trong chế độ xem, hãy thực hiện việc này.

import os 
from django.conf.settings import PROJECT_ROOT 

file_ = open(os.path.join(PROJECT_ROOT, 'filename')) 
+0

Điều đó đã làm được điều đó! Cảm ơn rất nhiều – fenomenoxp

3

Để sử dụng, tôi sẽ đặt nó trong mô-đun cài đặt. Trong settings.py, hãy thêm ví dụ: MY_LONG_QUERY = 'from FOO select BAR...'. Sau đó, theo quan điểm của bạn, bạn chỉ cần tải nó từ các cài đặt như vậy:

from django.conf import settings 
settings.MY_LONG_QUERY 

Nhưng điều này không thực sự trả lời câu hỏi của bạn. Giả sử điều khoản và tất cả đều đúng, giữ một tham chiếu đến gốc của dự án của bạn trong cài đặt của bạn như thế này:

ROOT_PATH = os.path.split(os.path.abspath(__file__))[0] 

Và sau đó một lần nữa theo quan điểm của bạn, hãy mở tập tin của bạn như sau:

from django.conf import settings 

def read_from_database(request): 
    f = open(os.path.join(settings.ROOT_PATH, 'myfile.db')) 
    # Do something with f 
+0

Sau câu trả lời trước, đó chỉ là những gì tôi đã làm hehe. Nhưng tôi cũng thích ý tưởng lưu truy vấn trong settings.py! – fenomenoxp

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