2017-02-26 3 views
1

私はDjangoを使って学生 - 教師ポータルを構築しています。
私は、教師と学生という2つのユーザーグループを持っています。ユーザーが先生の場合、私は別のテンプレート(学生の登録番号を選択するためのフォーム)を提供する必要があります。私は同じを行うにはthisリンクをたどった。ここでDjango:テンプレート変数とともにテンプレートに戻る

コードスニペットです:

home.htmlここ

{% if is_teacher %} 
    <p style="color:blue; text-align:center; font-size:160%"><b>Course taken: <span style="color:green"><a href="course/">IT000</a></span></b></p> 
    <form action="/" method="post" align="center"> 
     {% csrf_token %} 
     <div align="center">{{ form }}</div> 
     <input type="submit" value="Get student's results!" class="btn btn-primary" style="margin-top:10px"/> 
    </form> 
    {% else %} 
    <p style="color:blue; text-align:center; font-size:160%"><b>Performance for the subject <span style="color:green"><a href="course/">IT000</a></span> is shown below.</b></p> 
    {% endif %} 

views.py

@login_required(login_url="login/") 
def home(request): 
    is_teacher = request.user.groups.filter(name='teachers').exists() 
    if is_teacher: 
     if request.method == 'POST': 
      form = Regno(request.POST) 
      if form.is_valid(): 
       selected_reg = Student.objects.filter(regno=request.POST.get('regno')) 
       return render(request, 'home.html',{'selected_reg': selected_reg,'form':form}) 
     else: 
      form = Regno() 
      return render(request, 'home.html', {'form': form,'user':request.user,'is_teacher':is_teacher}) 
    else: 
     selected_reg = Student.objects.filter(regno=request.user) 
    return render(request, 'home.html', {'user':request.user,'is_teacher':is_teacher,'selected_reg':selected_reg}) 

教師は生徒のを入力するために、レグノはフォームです登録番号。

先生が最初にログインすると、フォームが表示されます。ただし、フォームを送信した後、フォームは表示されません。テンプレートの{%else%}部分を実行します。教師がフォームを提出した後、is_teacherテンプレート変数がこのテンプレートに渡されるようにするにはどうすればよいですか? Djangoセッションについて読んだことがありますが、それが助けになるかどうかはわかりません。

答えて

1

毎回is_teacherを渡す代わりに、RequestContextを使用してリクエストに合せて渡す必要があります。

フォーム送信時のポストコールのように見えますが、is_teacher変数は渡していません。

if form.is_valid(): 
    selected_reg = Student.objects.filter(regno=request.POST.get('regno')) 
    return render(request, 'home.html',{'selected_reg': selected_reg,'form':form}) 

(下記のコードで)あなたは上記でis_teacherを追加する必要があります。また

custom template tagを経由してそれを処理するためのより良い方法 -

register = template.Library() 

@register.filter(name='has_group') 
def has_group(user, group_name): 
    group = Group.objects.get(name=group_name) 
    return True if group in user.groups.all() else False 

とテンプレートで -

{% if request.user|has_group:'teachers' %} 
    .... 
{% else %} 
    .... 
{% endif %} 

あなたは各呼び出しでそれを渡して回避することができます。それが役に立てば幸い。

関連する問題