Tôi có một số tệp html bao gồm các mẫu được sử dụng bởi jQuery.tmpl. Một số thẻ tmpl (như {{if...}}
) trông giống như thẻ mẫu Django và gây ra một TemplateSyntaxError. Có cách nào tôi có thể chỉ định hệ thống mẫu Django nên bỏ qua một vài dòng và xuất chúng chính xác như họ đang có?Làm cách nào tôi có thể yêu cầu các mẫu Django không phân tích cú pháp một khối chứa mã trông giống như các thẻ mẫu?
13
A
Trả lời
20
Cách tích hợp sẽ là tự thoát từng mục mẫu bằng thẻ mẫu templatetag
(https://docs.djangoproject.com/en/1.3/ref/templates/builtins/#templatetag), nhưng tôi cho rằng đó không phải là những gì bạn muốn làm.
Điều bạn thực sự muốn là cách đánh dấu toàn bộ khối là văn bản thô (thay vì có thể diễn giải), yêu cầu thẻ tùy chỉnh mới. Bạn có thể muốn kiểm tra raw
thẻ ở đây: http://www.holovaty.com/writing/django-two-phased-rendering/
EDIT: Tính đến Django 1,5, điều này bây giờ xử lý bởi các built-in verbatim
mẫu thẻ
5
Có một vài vé mở để giải quyết vấn đề này: https://code.djangoproject.com/ticket/14502 và https://code.djangoproject.com/ticket/16318 Bạn có thể tìm thấy một đề xuất mới mẫu thẻ verbatim
dưới đây:
"""
From https://gist.github.com/1313862
"""
from django import template
register = template.Library()
class VerbatimNode(template.Node):
def __init__(self, text):
self.text = text
def render(self, context):
return self.text
@register.tag
def verbatim(parser, token):
text = []
while 1:
token = parser.tokens.pop(0)
if token.contents == 'endverbatim':
break
if token.token_type == template.TOKEN_VAR:
text.append('{{')
elif token.token_type == template.TOKEN_BLOCK:
text.append('{%')
text.append(token.contents)
if token.token_type == template.TOKEN_VAR:
text.append('}}')
elif token.token_type == template.TOKEN_BLOCK:
text.append('%}')
return VerbatimNode(''.join(text))
tôi nghĩ rằng 'tag raw' là một giải pháp thanh lịch hơn những cái. Plus 'verbatim' không xử lý các thẻ bình luận và trả về' noparse' và chuỗi rỗng. – Jake
Nếu bạn cảm thấy như vậy bạn nên chắc chắn để bình luận về vé có liên quan. Đó là cộng đồng quyết định những tính năng nào đang diễn ra ở Django. Tôi không nói đây là cách tốt nhất để làm điều đó nhưng đây là những gì cộng đồng hiện đang hướng tới. –
Khi kiểm tra chặt chẽ hơn, rõ ràng là noparse đi qua các mã thông báo trong khối và đặt tất cả chúng thành Text Tokens. – Jake