2011-01-12 41 views
19

Tôi đã có năm trang với cùng một bố cục trang và cấu trúc, nhưng một số màu sắc khác nhau, văn bản, vv, vì vậy đây là một môi trường lý tưởng cho khuôn mẫu. Tôi đã quyết định sử dụng Jinja2 và có lẽ là bình. Tôi đã đọc qua tài liệu và một số hướng dẫn trực tuyến, giải thích rất nhiều về những gì bạn có thể làm với các mẫu trên một trang nhưng không nhiều về cách gửi các biến đến trang.Bạn lưu trữ các biến trong jinja ở đâu?

  • Bạn lưu trữ các biến trang cụ thể ở đâu?
  • Mã này biết trang nào đã được yêu cầu và biến nào cần tải?
+1

Bình là một lựa chọn tốt. Và hướng dẫn của nó nhiều hay ít trả lời các câu hỏi của bạn: http://flask.pocoo.org/docs/quickstart/#rendering-templates. Cũng lưu ý cách '@ app.route' định nghĩa URL. – 9000

+0

Cảm ơn - vì vậy tôi sẽ có một kịch bản python cho mỗi trang, khai báo các biến trong mỗi kịch bản python, và sau đó chuyển chúng vào template.render? –

Trả lời

48

Dưới đây là cách sử dụng cơ bản:

Đầu tiên tạo một mẫu

>>> from jinja2 import Template 
>>> template = Template('Hello {{ name }}!') 

Sau đó, làm cho nó thông qua các biến

>>> template.render(name='John Doe') 
u'Hello John Doe!' 

Thông thường, bạn sẽ muốn tải mẫu từ các tập tin thay vì mã. Đó là hiệu quả hơn và tối ưu hóa, và cho phép mẫu thừa kế:

from jinja2 import Environment, PackageLoader 
env = Environment(loader=PackageLoader('yourapplication', 'templates')) 

rằng sẽ tìm kiếm mẫu bên trong thư mục templates của gói yourapplication Python, như được cài đặt trong đường dẫn Python. Bạn có thể sử dụng các trình tải khác để tải từ một hệ thống tệp cụ thể hoặc các địa điểm khác.

Sau đó, bạn có thể tải mẫu:

template = env.get_template('mytemplate.html') 
print template.render(the='variables', go='here') 

Khi sử dụng Flask nó được tất cả các cấu hình cho bạn, vì vậy bạn chỉ có thể sử dụng render_template chức năng Flask và nó sẽ đã tìm kiếm một thư mục con templates của ứng dụng của bạn:

from flask import render_template 

@app.route('/hello/') 
def hello(name=None): 
    return render_template('hello.html', name=name) 

Note mẫu biến (còn gọi là bối cảnh) được chuyển cho render_template

Jinja có khá good documentation. Vui lòng đọc nó. Vui lòng đặt thêm câu hỏi.

1

Edit: Tôi đã googled interweb trong việc tìm kiếm một câu trả lời và tôi đã tìm thấy một số điều mà có thể giúp (khá chắc chắn họ đã giúp tôi)

http://dbanck.de/2009/01/13/using-jinja2-with-django/

http://www.hindsightlabs.com/blog/2010/03/15/jinja2-and-django-4ever/ (chết)

http://djangosnippets.org/snippets/1061/

+0

Một lựa chọn các liên kết mà không cần bất kỳ lời giải thích nào cũng không hữu ích, -1 từ tôi. – jwbensley

+0

@jwbensley Awww, không hữu ích vì sao chép sao chép bị vô hiệu hóa? Đây là một lời giải thích: đọc ...Nhưng cũng bỏ phiếu của bạn là legit, bởi vì tôi đã lười biếng hoặc vội vàng (không thể nhớ được) – StefanNch

+0

Chỉ cần dán một tải các liên kết dẫn đến thối liên kết, đó là hiển nhiên như bạn đã đánh dấu một trong những liên kết như là chết. – jwbensley

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