Tôi nghĩ, cách tốt hơn là thêm cùng một chế độ xem hai lần với trình kết xuất khác biệt. Giả sử chúng ta có quan điểm như sau:
def my_view(request):
return {"message": "Hello, world!"}
Bây giờ trong cấu hình của chúng tôi, chúng tôi có thể thêm quan điểm tương tự hai lần:
from pyramid.config import Configurator
config = Configurator()
config.add_route('test', '/test', my_view, renderer="templates/my_template.mako")
config.add_route('test', '/test', my_view, renderer="json", xhr=True)
Những gì chúng ta có bây giờ:
- Xem
my_view
sẽ làm cho mẫu "templates/my_template.mako"
với dict trả lại được cung cấp dưới dạng ngữ cảnh nếu chúng tôi sẽ trỏ trình duyệt của chúng tôi đến url /test
.
- Nếu chúng tôi sẽ yêu cầu XHR với
my_view
sẽ được gọi lại, nhưng giờ đây lệnh trả về sẽ được mã hóa dưới dạng JSON và được truyền lại cho người gọi (vui lòng read docs về việc kiểm tra xem yêu cầu đã được thực hiện qua XHR) chưa.
Ý tưởng cùng chúng ta có thể sử dụng để xác định tuyến đường khác nhau nhưng với quan điểm tương tự gắn liền với chúng:
from pyramid.config import Configurator
config = Configurator()
config.add_route('test', '/test', my_view, renderer="templates/my_template.mako")
config.add_route('test_json', '/test.json', my_view, renderer="json")
Bây giờ /test
sẽ kích hoạt mẫu vẽ, nhưng /test.json
sẽ trở lại chuỗi chỉ JSON mã hóa.
Bạn có thể đi xa hơn và làm cho cử cho các renderer ngay qua accept
đối số của add_router
phương pháp:
from pyramid.config import Configurator
config = Configurator()
config.add_route('test', '/test', my_view, renderer="templates/my_template.mako")
config.add_route('test', '/test', my_view, renderer="json", accept="application/json")
Nếu yêu cầu đi kèm với giá trị tiêu đề Accept
thiết lập để application/json
JSON sẽ được trả lại, mẫu nếu không bạn bị trả lại.
Lưu ý, thao tác này sẽ chỉ hoạt động nếu bạn có các định dạng dữ liệu được xác định trước mà bạn muốn mã hóa phản hồi từ chế độ xem của mình nhưng đó là trường hợp thông thường. Trong trường hợp bạn cần gửi đi động, bạn có thể trang trí các chế độ xem của mình với đối số decorate
của add_route
sẽ chọn trình kết xuất phù hợp với quy tắc của bạn.
Khiếu nại của bạn là gì? Bạn có phàn nàn rằng kim tự tháp có API khác nhau từ giá treo? Nếu bạn không thích API của kim tự tháp, tại sao không quay trở lại Giá treo? –
Pyramid có sử dụng middleware không? Tại sao bạn không thể hiển thị JSON dựa trên những gì người dùng yêu cầu? Làm bên trong khung nhìn trực tiếp, nằm trong cuốn sách của tôi, một giải pháp bị lỗi. Nếu có thể, hãy tận dụng lợi thế trên phần mềm trung gian. – Anders