2011-11-17 9 views
13

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?

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/14502https://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)) 
+0

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

+2

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. –

+0

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