2012-02-23 43 views
6

Tôi đã phát triển một ứng dụng bằng hệ thống Flask rất dễ sử dụng và tôi đã sử dụng mẫu jinja để viết ra một loạt các liên kết tương ứng với các trang trong Flask xác định bởi một cái gì đó như thế này:biến jinja cho thư mục gốc của ứng dụng flask-

@app.route(/<var1>/<var2>) 
... 
... 

trong máy chủ thử nghiệm những liên kết này chỉ làm việc tốt tuy nhiên khi tôi di chuyển từ máy chủ thử nghiệm đến một máy chủ sau một proxy tôi nhận được một vấn đề mà các liên kết href không đưa vào tài khoản tên thư mục bổ sung được chèn bởi proxy của tôi.

#where a link should read: 
server:/myapp/<var1>/<var2> 
# it acually puts out: 
server:/<var1>/<var2> 

jinja etemplate của tôi trông giống như thế này nhưng tôi tự hỏi nếu thay vì đặt dấu gạch chéo ngược có cách để đặt biến xác định thư mục gốc.

{% block navigation %} 
{% for record in db.values() %} 
<li><a href="/{{db.name}}/{{record.name}}">{{record.name}}</a></li> 
{% endfor %} 
{% endblock %} 

Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn đội Flask!

Trả lời

6

Thứ nhất, như @reclosedev nói, bạn có thể tạo các URL bằng cách sử dụng chức năng url_for (giả sử dụng chức năng xem được gọi là myview:

<a href="{{ url_for('myview', var1=db.name, var2=record.name) }}"> 

Thứ hai, nếu bạn sau một proxy ngược lại, bọc ứng dụng WSGI với this decorator cập nhật môi trường yêu cầu để Flask tạo URL chính xác.

+0

cảm ơn alex, tôi thực sự sử dụng đoạn mã đó nhưng tôi các liên kết tôi đã tạo trong mẫu của tôi không cập nhật với các vị trí mới.thanks. – zach

3

Có thể bạn đang tìm kiếm chức năng url_for?

<li><a href="{{ url_for('view_func_name', 
         var1=db.name, 
         var2=record.name) }}">{{record.name}}</a></li> 
+2

Ngoài ra, nếu bạn đang đứng sau proxy ngược lại, hãy xem [đoạn bình này] (http://flask.pocoo.org/snippets)/35 /). –

+0

@AlexMorega, có lẽ đoạn trích này là giải pháp cho vấn đề của OP và tôi nghĩ rằng nó nên được đăng là câu trả lời. – reclosedev

+0

ok, cảm ơn bạn :) –

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