2012-03-14 17 views
0

403禁止されたエラーが発生しています。私は、フォーラムで説明されているコンテキストのものをやってみましたが、私はまだ正方形の1つです。CRSFトークンが見つからないか正しくありません

私は間違っていますか?私のviews.py

def add_player(request, team_id): 
    template = get_template('cricket/addplayer.html') 
    loggedinuser = request.user 
    team = Team.objects.get(id=team_id) 
    if request.method== 'POST': 
     form = PlayerForm(request.POST) 
     if form.is_valid(): 
      player = Player.objects.create(
       name = form.cleaned_data['name'], 
       team = Team.objects.get(id=team_id), 
       role = form.cleaned_data['role'], 
       position = form.cleaned_data['position'] 
      ) 

      return HttpResponseRedirect('/team/%s/' % team_id) 
    else: 
     form = PlayerForm 

    page_vars = Context({ 
     'form': form, 
     'loggedinuser': loggedinuser, 
     'team': team, 
    }) 

    output = template.render(page_vars) 
    return HttpResponse(output) 

と私のテンプレート。あなたが見ることができるように、それは私がかなりすぐに何かをオフに私の頭をハックますかなり確信しています{%csrf_token%}

{% extends 'cricket/base.html' %} 
{% block title %} 
    {{ loggedinuser }} 
{% endblock %} 

{% block username %} 
    {{ loggedinuser }} 
{% endblock %} 

{% block date %} 
    {{ today }} 
{% endblock %} 

{% block content %} 
    <div class="span7"> 
     <h2>Adding player for {{ team }}</h2> 
     <form method="post" action="."> 
      {% csrf_token %} 
      {{ form.as_p }} 
      <input type="submit"> 
     </form> 
    </div> 
{% endblock %} 

を持っています。

//マウス

オーケー、私はそれを解決しました。 RequestContextを使用する必要があります。ここに私の解決策は、あなたはまた、ジャンゴでクラスベースの汎用ビューを使用することができますcrsfcontext

page_vars = Context({ 
    'form': form, 
    'loggedinuser': loggedinuser, 
    'team': team, 
}) 

crsfcontext = RequestContext(request, page_vars) 

output = template.render(crsfcontext) 
return HttpResponse(output) 
+1

こんにちはマウス、あなたの問題を解決してうれしい。ソリューションを含めるように質問を編集するのではなく、別の答えとして追加する方が良いでしょう。こうすることで、他のユーザーが投票できるようになり、受け入れられたとマークすることができ、他のユーザーはあなたがその答えを見つけたことを知ることができます。 – Alasdair

+2

ビューでもっとクリーンなコードを表示するには[render](https://docs.djangoproject.com/ja/dev/topics/http/shortcuts/#render)を使用してください – ilvar

+0

私自身の質問に答えることができず、待たなければなりませんでした8時間。 – debuggerpk

答えて

0

を含めることのorignalのコードの最後の2行を変更しています。 (私はそれをテストしていない)

urls.py

urlpatterns = patterns('', 
    url(r'^your-url/(?P<teamId>\d+)/$', AddPlayerView.as_view(), name="add-player"), 
) 

views.py

from django.views.generic import FormView 
from django.core.urlresolvers import reverse 
..... 

class AddPlayerView(FormView): 

    template_name = 'cricket/addplayer.html' 
    form_class = PlayerForm 

    def form_valid(self, form): 
    """ Code if the form is valid """ 
       ... 
     player = Player.objects.create(
      name = form.cleaned_data['name'], 
      team = Team.objects.get(id=form.cleaned_data['team_id']), 
      role = form.cleaned_data['role'], 
      position = form.cleaned_data['position'] 
     ) 

     # You could use url reverse here 
     url = reverse('your-view-name', args=[form.cleaned_data['team_id']]) 
     return HttpResponseRedirect(url) 


    def form_invalid(self, form): 
    """ Code if the form is invalid """ 
     ..... 


    def get_context_data(self, **kwargs): 
     context = super(AddPlayerView, self).get_context_data(**kwargs) 
     loggedinuser = self.request.user 
     team = Team.objects.get(id=self.kwargs['teamId']) 
     context['loggedinuser'] = loggedinuser 
     context['team'] = team 
     return context 
0

てみ使用render_to_response機能の代わりのHttpResponse一部と: は、あなたのケースでは、このようなものだろうRequestContext。

関連する問題