2016-11-15 3 views
1

ユーザデータ(日付、名前、住所、連絡先の番号)を表形式で表示するテンプレートがあります。このテンプレートにユーザー日付を取り入れて、特定の日付のエントリを表示するようにテーブルを変更するフィルタボタンを適用するにはどうすればよいですか。私のテーブルの内容を日付に合わせてdjangoテンプレートに表示するには

Table.html

{% block content %} 
<h1 style="font-size:300%;">ATTENDANCE TABLE</h1><hr /><br /> 

<table> 
<tr> 
    <th>DATE</th> 
    <th>NAME</th> 
    <th>SITE</th> 
    <th>TYPE OF LEAVE</th> 
    <th>REASON</th> 
    <th>ARRIVAL</th> 
    <th>TIME IN</th> 
    <th>TIME OUT</th> 
</tr> 
{% for topic in topics %} 
<tr> 
    <td>{{ topic.date }}</td> 
    <td>{{ topic.name }}</td> 
    <td>{{ topic.site }}</td> 
    <td>{{ topic.leave_type }}</td> 
    <td>{{ topic.reason }}</td> 
    <td>{{ topic.arrival }}</td> 
    <td>{{ topic.intime }}</td> 
    <td>{{ topic.outtime }}</td> 
</tr> 
{% endfor %} 

この表が表示されたら、私は日付を受け入れ、その入力された日付のエントリを表示するには、テーブルを変更し、フィルタボタンを持っていると思います。新しいビューを作成するか、.htmlファイルで再生する必要がありますか?

私は{{variable | date}}フィルタを使用して無駄にしました。

EDIT: 他のファイルを共有して、フォームテンプレートフィルタアプローチを実装します。

<body> 
<table> 
    <tr> 
     <th>DATE</th> 
     <th>NAME</th> 
     <th>SITE</th> 
     <th>TYPE OF LEAVE</th> 
     <th>REASON</th> 
     <th>ARRIVAL</th> 
     <th>TIME IN</th> 
     <th>TIME OUT</th> 
     <th>COMMENT</th> 

    </tr> 
    {% for post in posts %} 

     <tr> 
      <td>{{ post.date }}</td> 
      <td>{{ post.name }}</td> 
      <td>{{ post.site }}</td> 
      <td>{{ post.leave_type }}</td> 
      <td>{{ post.reason }}</td> 
      <td>{{ post.arrival }}</td> 
      <td>{{ post.intime }}</td> 
      <td>{{ post.outtime }}</td> 
      <td>{{ post.comment }}</td> 
     </tr> 


    {% endfor %} 




</table> 
</body> 

forms.py

from django import forms 
    from django.forms.fields import DateField, TimeField, DateInput, TimeInput, 

datetime 
    from django.contrib.auth.forms import AuthenticationForm 
    from django.utils.translation import ugettext_lazy as _ 
    from django.forms.extras.widgets import SelectDateWidget 
    from .lala import SelectTimeWidget 
    import datetime 



    from .models import Topic, AppStaff 

    class TopicForm(forms.ModelForm): 

    date= forms.DateField(widget=SelectDateWidget, initial=datetime.date.today) 
    name=forms.ModelChoiceField(queryset=AppStaff.objects.values_list('agent',flat=True)) 
    intime=forms.TimeField(widget= SelectTimeWidget(twelve_hr=True,  required=False,use_seconds=False),required=False) 
    outtime=forms.TimeField(widget= SelectTimeWidget(twelve_hr=True, required=False,use_seconds=False),required=False) 
    class Meta: 
     model = Topic 
     #fields = ['site','leave_type','reason','arrival','intime','outtime'] 

    class FilterForm(forms.Form): 
    date1= forms.DateField(widget=SelectDateWidget, initial=datetime.date.today) 

Views.py

from django.utils import timezone 
from django.shortcuts import render 
from django.http import HttpRequest 
from django.template import RequestContext 

from django.http import HttpResponseRedirect 
from django.core.urlresolvers import reverse 
from django.shortcuts import render_to_response 
from .models import Topic, AppStaff 
from .forms import TopicForm, FilterForm 
import datetime 


def topics(request): 
     """Show all topics.""" 
     topics = Topic.objects.all() 
     context = {'topics': topics} 



     return render(request, 'app/topics.html', context) 



    def new_topic(request): 
    """Add a new topic.""" 
    if request.method != 'POST': 
     # No data submitted; create a blank form. 
     form = TopicForm() 
    else: 
     # POST data submitted; process data. 
     form = TopicForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect(reverse('new_topic')) 

    context = {'form': form} 
    return render(request, 'app/new_topic.html', context) 




    def filter(request): 

     form = FilterForm() 



     if request.method == "POST": 
      f = FilterForm(request.POST) 
      if f.is_valid(): 

       posts = Topic.objects.filter() 
       return HttpResponseRedirect("app/filter.html",{"posts":posts}) 
     else: 
      return render_to_response("app/filter.html",{"form":form} ,   context_instance = RequestContext(request)) 

filter.htmlは私のFilterFormは、日付フィールドを示しますが、私は提出打ったとき、それはフィルタを開く必要があります.htmlとフィルタリングされたリスト私は何かが欠落していると確信していますが、実際には今何週間何があるのか​​分かりません。

答えて

1

Djangoテンプレートは、サーバー側でページを作成し、クライアント側で何が起こるかを制御しません。

フィルタリングを行うためにDjangoテンプレートを使用する場合は、フォームを使用してアクションをサーバーに送信し、テンプレートフィルタを使用してページを再レンダリングすることができます。しかし、これは悪いユーザーエクスペリエンスです。

これを達成するにはjavascriptを使用することをおすすめします。良いjavascriptのlibはdatatablesです。データテーブルdjango-datatablesのdjangoアプリもあります。

完全な開示:私は非常に複雑なテーブルにライブラリを使用し、それにも貢献しました。

関連する問題