0

django-floppyforms から Sliderを実装しようとしています。ただし、指定された例を使用すると、ページに空のテキスト ボックスが 1 つしか表示されません。を使用してレンダリングすると{{form.as_p}}、ネイティブのスライダーしか動作しませんが、JS 機能が本当に気に入っています。

http://jquery.com/download/jquery-1.11.1.min.jsからダウンロードした のコピーがあります。そのファイルパスは 「floppy_project/src/floppyform_test/static/js」です。floppyform_test/static/js/jquery-1.11.1.min.js

jQueryファイルパス(多くのバリエーションを試しました)またはviews.pyに問題がある可能性があると思います

これまでJavaScriptを実際に使用したことはありませんが、試したことは次のとおりです。

ビュー.py

def sview(request):
    jquery_slider = Slider()
    native_slider = SlideForm()

    return render(request, 'slider.html', {
                                           'jquery_slider': jquery_slider,   
                                           'native_slider': native_slider,             
                                           })

Slider.html (オリジナルから改作)

{# slider.html #}
{% include "floppyforms/input.html" %}
<div id="{{ attrs.id }}-slider"></div>

<script type="text/javascript" src="{{ STATIC_URL }} /static/js/jquery-1.11.1.min.js">
  $(document).ready(function() {
    var type = $('<input type="range" />').attr('type');
    if (type == 'text') { // No HTML5 support
      $('#{{ attrs.id }}').attr("readonly", true);
      $('#{{ attrs.id }}-slider').slider({
        {% if value %}value: {{ value }},{% endif %}
        min: {{ attrs.min }},
        max: {{ attrs.max }},
        step: {{ attrs.step }},
        slide: function(event, ui) {
          $('#{{ attrs.id }}').val(ui.value);
        }
      });
    }
  });
</script>

forms.py (オリジナルからコピー)

import floppyforms as forms

class Slider(forms.RangeInput):
    min = 5
    max = 20
    step = 5
    template_name = 'slider.html'

    class Media:
        js = (
            'js/jquery.min.js',
            'js/jquery-ui.min.js',
        )
        css = {
            'all': (
                'css/jquery-ui.css',
            )
        }

class SlideForm(forms.Form):
    num = forms.IntegerField(widget=Slider)

    def clean_num(self):
        num = self.cleaned_data['num']
        if not 5 <= num <= 20:
            raise forms.ValidationError("Enter a value between 5 and 20")

        if not num % 5 == 0:
            raise forms.ValidationError("Enter a multiple of 5")
        return num

どんな助けでも大歓迎です

4

1 に答える 1

1

三つのこと:

  1. {{static_url}}/static.... パスで jquery ファイルを見つけることができますか? static_url を /static/ に設定した場合、/static を再度追加する必要はありません。

  2. Slider ウィジェットでさらに jquery を宣言しましたが、テンプレート内の宣言とはパスとバージョンが異なるため、衝突が発生します。

  3. あなたが行ったようにあなたのjqueryファイルを宣言しないでください - それをドキュメントの頭に入れてから、 $(document).ready(function(){}) 構文を使用してアドホックスクリプトを書いてください

于 2014-07-07T20:13:56.470 に答える