2009-10-13 28 views
7

Tôi cần một tiện ích, chỉ hiển thị một khối, vì tôi sẽ thêm chức năng với jQuery. Tôi đang cố gắng bao gồm javascript và stylesheet máng lớp "Media" của Widget và nó không làm việc cho tôi.Phương tiện Django Widget không hoạt động

Đây là mã:

class StarsWidget(Widget): 
    """ 
    Widget with stars for rating 
    """ 
    class Media: 
     js = (
       settings.MEDIA_URL + 'js/rating.js', 
      ) 

     css = { 
       'screen': (
        settings.MEDIA_URL + 'css/rating.css', 
        ) 
       } 


    def render(self, name, value, attrs=None): 
     if value is None: value = '' 

     attrs = {'id':'ratingX', 'class':'rating'} 
     final_attrs = self.build_attrs(attrs, name=name) 
     if value != '': 
      # Only add the 'value' attribute if a value is non-empty. 
      final_attrs['value'] = force_unicode(value) 
     return mark_safe(u'<div %s ></div>' % flatatt(final_attrs)) 

Mọi góp ý hoặc trợ giúp sẽ được đánh giá cao

+0

Kiểm tra HTML (X) được tạo cho nơi trình duyệt của bạn đang tìm kiếm JS/CSS của bạn. Đó có phải là nơi bạn mong đợi không? Liệu nó tải tại vị trí đó nếu bạn cố gắng tải nó trực tiếp? –

Trả lời

3

Paths trong "lớp Media" sẽ tự động được thêm vào phía trước với settings.MEDIA_URL. Vì vậy, cố gắng như thế này:

class Media: 
    js = ('js/rating.js',) 
    css = {'screen': ('css/rating.css',),} 

Nếu nó sẽ không làm việc, tôi đề nghị sử dụng Firebug hoặc một cái gì đó giống như nó và kiểm tra nếu trình duyệt có thể tải css và javascript.

Dựa trên nhận xét: Có vẻ như bạn không tải phương tiện truyền thông biểu mẫu của mình. Thử thêm trong mẫu:

{{ my_form.media }} 

trong {% khối tiêu đề phụ%} (hoặc bất cứ nơi nào bạn đang tải kịch bản và css), trong đó "My_Form" là tên của dụ mẫu của bạn, tạo ra trong giao diện.

+0

thx cho câu trả lời, nhưng MEDIA_URL không phải là vấn đề. Khi tôi gỡ lỗi nó trong giao diện điều khiển python tôi nhận được kết quả đầu ra chính xác, tôi có nghĩa là >>> widget.media Tôi nghĩ rằng tôi cần một templatetag đặc biệt mà nên tải tất cả các phương tiện truyền thông của các hình thức mà không lặp lại chúng. – Xidobix

28

Bạn có thực sự bao gồm phương tiện biểu mẫu trong mẫu của mình ở bất kỳ đâu không?

{% block extrahead %} 
    {{ form.media }} 
{% endblock %} 
+1

Nó không phải là rất rõ ràng trong các tài liệu. Nó dường như là tự động: "Mỗi khi CalendarWidget được sử dụng trên biểu mẫu, biểu mẫu đó sẽ được hướng dẫn để bao gồm tệp CSS pretty.css và các tệp JavaScript animations.js và actions.js" https: //docs.djangoproject .com/vi/1.11/topics/forms/media/# asset-as-a-static-definition – ThePhi

0

Tối ưu hóa tối thiểu: Bạn không cần phải thêm cài đặt trước.MEDIA_URL vào đường dẫn của bạn, nó được thực hiện tự động khi nó được in ra.

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