1

django で jquery を使用して、関連するドロップダウン値を表示したいと考えています。最初のドロップダウン リストには、python、ruby、php などの言語が含まれています。2 番目のドロップダウンには、言語に関連するフレームワークがあります。Python の場合、フレームワークは django、pylons、grok です。ルビーの場合、フレームワークはレール、キューバです。PHP の場合、フレームワークは cakephp、codeignator です。言語、フレームワーク、および Web サイトの 3 つのテーブル名を書きました。

models.py

class languages(models.Model):
    lname=models.CharField(max_length=10)
    def __unicode__(self):
        return self.lname

class framework(models.Model):
    fname=models.CharField(max_length=25)
    lang=models.ForeignKey(languages)
    def __unicode__(self):
        return self.fname

class website(models.Model):
    wname=models.CharField(max_length=30)
    framewrk=models.ForeignKey(framework)
    def __unicode__(self):
        return self.wname

Views.py

def lang_fun(request):
    if request.method=='POST':
        l=request.POST.get('l1')
        languages(lname=l).save()
        return HttpResponseRedirect('/frame_fun')
    else:
        return render(request,"languages.html")
def frame_fun(request):
    if request.method=='POST':
        la=request.POST.get('drop1')
        f=request.POST.get('f1')
        framework(lang_id=la,fname=f).save()
        return HttpResponseRedirect('/web_fun')
    else:
        stl=languages.objects.all()
        return render(request,"framework.html",{'stl':stl})
def web_fun(request):
    if request.method=='POST':
        fr=request.POST.get('drop2')
        w=request.POST.get('w1')
        website(framewrk_id=fr,wname=w).save()
        return HttpResponseRedirect('/display')
    else:
        stl=framework.objects.all()
        return render(request,"website.html",{'stl':stl})
def display(request):
    s1=languages.objects.all()
    s=website.objects.all()
    return render(request,"display.html",{'s':s,'s1':s1})

display.html

<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
    $('#drop1').on('change', function() { 
             $('#text1').val($('#drop1').val());

             });
    });
</script>
</head>
<body>
<table id="tab1" border="1px">
<tr><th>language</th><th>framework</th><th>website</th></tr>
{% for i in s %}
 <tr><td> {{i.framewrk.lang.lname}}</td>
  <td>{{i.framewrk.fname}}</td>
  <td>{{i.wname}}</td>
  </tr>
  {% endfor %}
</table>
<select id="drop1">
{% for i in s %}
<option value={{i.framewrk.fname}}>{{i.framewrk.lang.lname}}</option>
{% endfor %}
<input type="text" id="text1">
</body>
</html>

私の views.py には、言語用のフレームワークと Web サイトが追加されています。私の display.html では、言語に対応するフレームワークと Web サイトを表示しました。ドロップダウンで言語にアクセスしています。含まれているフレームワークの数に応じて、言語が繰り返されます。リピート無しでお願いします。また、テキスト ボックスに言語のフレームワークを 1 つずつ表示できます。ドロップドンに入れたい。Python を選択すると、Python のフレームワークが別のドロップダウンに表示されます。htmlとjqueryの書き方を教えてください。前もって感謝します。パイソンを学んでいます。だから私を導いてください。

4

1 に答える 1

1

比較的簡単な作業ですが、django によって可能になった最善のアプローチを使用するのではなく、独自のツールで多くのことをしようとしたと思います。これらすべてを例として書き出すには時間がかかりすぎるため、同じことを達成するために私が行うことの概要を説明します。

1) フォームの表示とモデル データの保存/処理には django フォームを使用します。異なる選択ボックスに対して異なるフィールドを持つ単一のフォームを作成できます。あるフィールドの選択は別のフィールドの選択に依存するため、条件付きフィールドが必要になります。条件付きフォームの使用に関するこの投稿を参照してください: (リンク)。あなたの場合、フォームinitメソッドでフォームにバインドされたデータにアクセスし、そこから選択した言語/フレームワークの値を読み取り、それらの値に基づいてフレームワーク/ウェブサイトの選択を設定するなどの操作を行う必要があります。

2) フィールド変更イベントは、変更が行われたときにフォームの内容を更新する良い方法です。ただし、フォームを POST しないでください。同じアドレスでフォーム GET を実行できます。

3) ビューでは、request.POST または request.GET の両方を初期パラメーターとしてフォーム クラスに渡すことができます。どちらの場合も、これはフォームのバインドされたデータになります。このデータは、フォームのinitメソッドで使用可能な選択肢を決定するために使用されます。

4) request.GET の場合は、同じフォームを再度返すだけです。レンダリングされたばかりのフォーム要素を返すことができ、Web ページでそのレンダリングされた html を使用して既存のフォームを交換することができます。jquery.live メソッドを使用して「変更」イベントをフォーム フィールドにバインドすることを忘れないでください。そうしないと、フォームを交換した後にイベントが機能しなくなります。

5) 実際にフォームを投稿する場合にのみ、POST を使用してください。

これにより何が得られますか:

1) 4 つのビューではなく 1 つのビューのみを使用します。これはすべて、1 つの比較的単純なビュー内で実行できます。

2) フィールドの値/選択肢に関連するすべてのロジックはフォーム クラスにあり、ここが最適な場所です。

3) OOP の使い方を学びます。これは、Django を使い続ける予定がある場合に非常に役立ちます。

4)補足として、これをチェックアウトする必要があります:リンク

アラン

于 2013-11-12T10:25:27.320 に答える