Jinja2 có hỗ trợ đường dẫn tương đối mẫu hay không, ví dụ: %(here)s/other/template.html
, để bao gồm các mẫu khác liên quan đến vị trí của mẫu hiện tại trong hệ thống tệp?Ngôn ngữ lập trình của Jinja2 có khái niệm 'ở đây' (thư mục hiện hành) không?
Trả lời
Tôi không tin như vậy. Thông thường, bạn bao gồm hoặc mở rộng các mẫu khác bằng cách chỉ định đường dẫn của chúng liên quan đến gốc của trình tải mẫu bất kỳ và môi trường bạn đang sử dụng.
Vì vậy, giả sử các mẫu của bạn là tất cả trong /path/to/templates
và bạn đã thiết lập Jinja như vậy:
import jinja2
template_dir = '/path/to/templates'
loader = jinja2.FileSystemLoader(template_dir)
environment = jinja2.Environment(loader=loader)
Bây giờ, nếu bạn muốn đưa vào /path/to/templates/includes/sidebar.html
trong /path/to/templates/index.html
mẫu, bạn muốn viết theo sau trong số index.html
:
{% include 'includes/sidebar.html' %}
và Jinja sẽ tìm ra cách tìm.
Theo tài liệu cho jinja2.Environment.join_path(), hỗ trợ cho các đường dẫn mẫu tương đối có thể bằng cách ghi đè tham gia join_path() để triển khai "nối đường dẫn mẫu".
class RelEnvironment(jinja2.Environment):
"""Override join_path() to enable relative template paths."""
def join_path(self, template, parent):
return os.path.join(os.path.dirname(parent), template)
Chỉ cần để thêm vào câu trả lời Will McCutchen của,
Bạn có thể có nhiều thư mục trong bộ nạp của bạn. Sau đó nó tìm kiếm trong mỗi thư mục (theo thứ tự) cho đến khi nó tìm thấy mẫu.
ví dụ, nếu bạn muốn có "sidebar.html" thay vì "/includes/sidebar.html" sau đó có:
loader=jinja2.FileSystemLoader(
[os.path.join(os.path.dirname(__file__),"templates/includes"),
os.path.join(os.path.dirname(__file__),"templates")])
thay vì
loader=jinja2.FileSystemLoader(os.path.join(os.path.dirname(__file__),"templates"))
Cách sạch để vượt qua giới hạn này, sẽ có phần mở rộng jinja2 sẽ cho phép import relative template names
Điều gì đó thích:
from jinja2.ext import Extension
import re
class RelativeInclude(Extension):
"""Allows to import relative template names"""
tags = set(['include2'])
def __init__(self, environment):
super(RelativeInclude, self).__init__(environment)
self.matcher = re.compile("\.*")
def parse(self, parser):
node = parser.parse_include()
template = node.template.as_const()
if template.startswith("."):
# determine the number of go ups
up = len(self.matcher.match(template).group())
# split the current template name into path elements
# take elements minus the number of go ups
seq = parser.name.split("/")[:-up]
# extend elements with the relative path elements
seq.extend(template.split("/")[1:])
template = "/".join(seq)
node.template.value = template
return node
- 1. Ý nghĩa của khái niệm serialization trong ngôn ngữ lập trình là gì?
- 2. Các khái niệm ngôn ngữ lập trình khác nhau và ngôn ngữ nào hiển thị chúng theo cách thuần túy
- 3. ngôn ngữ lập trình không xác định
- 4. Có thể thực hiện một ngôn ngữ lập trình thứ hai bằng ngôn ngữ đó không?
- 5. Ngôn ngữ lập trình có nên trực quan không?
- 6. Ngôn ngữ lập trình PHP hoặc ngôn ngữ lập trình?
- 7. Khái niệm giả thuyết, trước đây-C++ 0x câu hỏi
- 8. Mục đích của ngôn ngữ lập trình Scala là gì?
- 9. Hướng dẫn về khái niệm lập trình 3D?
- 10. Khái niệm phân tích ngữ nghĩa tiềm ẩn
- 11. Khái niệm cơ bản về thiết lập sao chép RavenDB
- 12. Có một thuật ngữ cho khái niệm này, và nó tồn tại trong một ngôn ngữ gõ tĩnh?
- 13. Ngữ pháp của các ngôn ngữ lập trình hiện đại không có ngữ cảnh hay nhạy cảm với ngữ cảnh?
- 14. Ngôn ngữ lập trình Siri
- 15. C# Ngôn ngữ lập trình
- 16. Phát hiện ngôn ngữ lập trình trong PHP
- 17. Tôi nên chọn ngôn ngữ lập trình chức năng nào làm ngôn ngữ lập trình hàm đầu tiên?
- 18. Trạng thái hiện tại của LOGO là gì? (Ngôn ngữ lập trình)
- 19. Học cách ngôn ngữ lập trình hoạt động
- 20. Hiệp phương sai và contravariance trong ngôn ngữ lập trình
- 21. Ngôn ngữ lập trình JS giống như Jinja
- 22. Ấn tượng đầu tiên của ngôn ngữ lập trình Fantom?
- 23. Có ngôn ngữ lập trình nào hỗ trợ xml không?
- 24. Có một ngôn ngữ được tạo riêng cho lập trình Hợp phần Thực thể không?
- 25. Các ngôn ngữ lập trình chức năng có phù hợp với lập trình đồ họa không?
- 26. Dịch mã byte Java sang các ngôn ngữ lập trình và ngôn ngữ lập trình khác
- 27. Ngôn ngữ lập trình đã nhập
- 28. Tạo ngôn ngữ lập trình với C#
- 29. Ngôn ngữ lập trình bí ẩn
- 30. Windows: Ngôn ngữ lập trình nào?