2012-03-21 34 views
13

Tôi đang cố triển khai ứng dụng django sekizai. Nó đang sao chép các tệp js mà tôi đang thêm.Thẻ django sekizai {% addtoblock%} không hoạt động đúng cách

cơ sở mẫu:

{% load sekizai_tags %} 
... 
{% render_block "my_js" %} 

mẫu mà đang sử dụng căn cứ này:

{% load sekizai_tags %} 
<div id="a1" > 
    {% addtoblock "my_js" %} 
     <script type="text/javascript" src="{{ MEDIA_URL }}js/my_js.js"></script> 
    {% endaddtoblock %} 
</div> 
{% addtoblock "my_js" %} 
    <script type="text/javascript" src="{{ MEDIA_URL }}js/my_js.js"></script> 
{% endaddtoblock %} 

Bây giờ đây mẫu được kết xuất đã trả twice.But khi tôi cố gắng thêm cùng một kịch bản trong div nó wasn không được sao chép. Sẽ đánh giá cao nếu ai đó có thể làm sáng tỏ điều này!

Ngoài ra khi tôi cố gắng sử dụng {% addtoblock%} trong mẫu được hiển thị bằng thẻ mẫu, tập lệnh bị thiếu (Nó không được bao gồm hoặc không nằm trong mẫu đó).

Lưu ý: Thẻ mẫu, render_blockaddtoblock, là từ gói django-sekizai.

+0

tốt tôi có thể tìm ra lý do đằng sau việc sao chép kịch bản của tôi đó là sự khác biệt trong thụt lề của kịch bản trong và ngoài div. {% addtoblock%} tag dường như không xóa các khoảng trắng. Vì vậy, giải pháp cho câu hỏi đầu tiên của tôi là một trong những ngớ ngẩn như sau: {% tải sekizai_tags%}

{% addtoblock "my_js" %}{% endaddtoblock %}
{% addtoblock "my_js" %} {% endaddtoblock%} –

+0

Cũng trong mẫu của thẻ mẫu tùy chỉnh, các tập lệnh đã biến mất. Theo [django-sekizai-docs] (https://github.com/ojii/django-sekizai/blob/master/docs/restrictions.rst), bắt buộc phải sử dụng SekizaiContext hoặc RequestContext và bộ xử lý ngữ cảnh sekizai nhưng tôi tìm thấy giải pháp thay thế nếu bạn muốn giảm kích thước của bối cảnh mẫu của mình (ví dụ: cont = {}) sử dụng tham số này ['SEKIZAI_CONTENT_HOLDER'] = context ['SEKIZAI_CONTENT_HOLDER']. Với cách giải quyết này bạn không cần sử dụng RequestContext và chỉ bộ xử lý ngữ cảnh sekezai là đủ. –

Trả lời

26

{% addtoblock %}{% endaddtoblock %} phải nằm trong một khối trong các mẫu kế thừa mẫu khác.

# base.html 
<html> 
    ... 
    {% render_block 'js' %} 
    {% block js %}{% endblock %} 
</html> 


# some-page.html 
{% inherits 'base.html' %} 

{% block js %} 
    {% addtoblock 'js' %} 
     <script type="text/javascript" ... /> 
    {% endaddtoblock %} 
{% endblock %} 

Hy vọng sẽ giúp bạn.

+0

Nó sẽ không hoạt động. sekizai sẽ phân tích cú pháp nó thành "\ n (8 dấu cách)

3

{% addtoblock%} bên trong mẫu (something.html) từ một thẻ bao gồm:

from django import template 
from django.conf import settings 

register = template.Library() 

@register.inclusion_tag('something.html', takes_context=True) 
def render_something(context, some_arg): 
    sezikai_ctx_var = getattr(settings, 'SEKIZAI_VARNAME', 'SEKIZAI_CONTENT_HOLDER') 
    attrs = { 
     'some_arg': some_arg, 
     sezikai_ctx_var: context[sezikai_ctx_var] 
    } 
    return attrs 
+0

Rất hữu ích - tài liệu này có ở bất kỳ đâu không? – petr

+0

Hoạt động trên 1,10 cho tôi, cảm ơn! Điều này thực sự nên đi vào tài liệu .. –

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