24

Tôi cố gắng buôn lậu mẫu HTML trong HTML cho mustache.js, tuy nhiên công cụ mẫu django xóa tất cả trình giữ chỗ phải là đầu ra như là cho giao diện người dùngDjango và Mustache sử dụng cú pháp tương tự cho mẫu

mẫu được bao gồm trong HTML theo cách này:

<script type="text/x-mustache-template" data-id="header_user_info"> 
    <div id="header_user_info"> 
     <div id="notification">0</div> 
     <a href="#">{{username}}</a> 
    </div> 
</script> 

và tôi có thể lấy mẫu HTML bằng cách chạy $ (el) .html(), và tạo ra html bằng cách sử dụng Mustache.to_html (temp, dữ liệu);

Tôi có thể đặt tất cả mẫu vào một tệp tĩnh khác và phân phát từ CDN, nhưng sẽ khó theo dõi vị trí mẫu, và ít nhất một yêu cầu http bổ sung.

+0

@Alasdair Xem câu trả lời của tôi cho một cách tốt hơn để làm điều này. Giải pháp 'templatetag' là quá dài dòng. – surjikal

+0

bạn có thể sử dụng thẻ chính xác trong dự án của mình. Nhìn vào [liên kết này] (https://code.djangoproject.com/ticket/16318). –

Trả lời

21

Bạn có thể sử dụng tempatetag {% templatetag %} để in ra các ký tự thường được xử lý bởi Django. Ví dụ:

{% templatetag openvariable %} variable {% templatetag closevariable %} 

Kết quả trong những điều sau đây trong HTML của bạn:

{{ variable }} 

Đối với một danh sách đầy đủ của các đối số xem: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#templatetag

+0

Cảm ơn. Nó làm việc cho tôi. –

+1

Tuyệt vời. Sau đó, chấp nhận câu trả lời của tôi. Có lẽ bạn cũng nên chấp nhận câu trả lời cho các câu hỏi khác mà bạn đã hỏi. –

+0

Đẹp nhất! Không có ý tưởng về thẻ này. –

6

Cố gắng sử dụng django-mustachejs

{% load mustachejs %} 
{% mustachejs "main" %} 

Django -mustachejs sẽ tạo ra các mục sau:

<script>Mustache.TEMPLATES=Mustache.TEMPLATES||{};Mustache.TEMPLATES['main']='<<Your template >>';</script> 
2

Tôi có cùng một vấn đề, nhưng sử dụng

{% templatetag openvariable %} variable {% templatetag closevariable %} 

là quá rườm rà cho tôi. Tôi vừa mới bổ sung thêm một mẫu rất đơn giản tùy chỉnh tag:

@register.simple_tag 
def mtag(tagContent): 
    return "{{%s}}" % tagContent 

Vì vậy mà bây giờ tôi có thể viết:

{% mtag "variable" %} 
1

Tôi có cùng một vấn đề, vì vậy hầu hết thời gian của tôi biến là một phần của một chuỗi có thể dịch.

{% trans "The ball is {{ color }}" %} 

Bạn có thể sử dụng transplatetag trans ngay cả khi bạn không cung cấp i18n.

47

Bạn chỉ có thể thay đổi các thẻ:

Mustache.tags = ['[[', ']]']; 
+6

Cách tiếp cận tốt nhất cho vấn đề, cảm ơn bạn! – FRD

+0

Thay đổi thẻ Mustache để xử lý vấn đề Django? Không lý tưởng. Trong quá khứ không có nhiều lựa chọn, nhưng Django 1.5 bây giờ hỗ trợ các thẻ nguyên văn. Xem câu trả lời của @cat bên dưới. – mynameistechno

+1

Tại sao thẻ chính xác tốt hơn? – surjikal

20

Nếu bạn sử dụng django 1.5 và sử dụng mới hơn:

{% verbatim %} 
    {{if dying}}Still alive.{{/if}} 
    {% endverbatim %} 

Nếu bạn đang bị mắc kẹt với django 1.2 trên appengine mở rộng cú pháp django với đúng nguyên văn lệnh mẫu như thế này ...

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)) 

Trong tệp của bạn (python 2.7, HDR) sử dụng:

from django.template import Context, Template 
import django 
django.template.add_to_builtins('utilities.verbatim_template_tag') 

html = Template(blob).render(Context(kwdict)) 

Trong tập tin của bạn (python 2.5) sử dụng:

from google.appengine.ext.webapp import template 
template.register_template_library('utilities.verbatim_template_tag') 

Nguồn: http://bamboobig.blogspot.co.at/2011/09/notebook-using-jquery-templates-in.html

1

Bạn có thể sử dụng được xây dựng trong mustache.js đặt thẻ delimiter để thay đổi các thẻ mặc định mà bộ ria mép sử dụng.

ví dụ:

{{=<% %>=}} 

bây giờ bạn có thể làm điều này:

<% variable %> 
Các vấn đề liên quan