私は、「投票する」ボタンのように、ユーザークリックで増加する整数フィールドを持つモデルを持っています。django ajaxのエラー405
ボタンは詳細ビューにのみ表示されます。投票数を増やすには、ajax POSTを送信します。問題は、ビューを実行する前でもdjangoが405(メソッドは許されない)エラーを返すことです。これを引き起こす原因は何ですか?ここで
は私のコードです:
views.py(実行されません)
@require_POST
def vote_proposal(request, space_name):
"""
Increment support votes for the proposal in 1.
"""
prop = get_object_or_404(Proposal, pk=request.POST['propid'])
proposal_form = VoteProposal(request.POST or None, instance=prop)
if request.method == "POST" and request.is_ajax:
if proposal_form.is_valid():
vote = proposal_form.cleaned_data['propid']
vote.support_votes += 1
vote.save()
msg = "The vote has been saved."
else:
msg = "The vote didn't pass validation."
else:
msg = "An error has ocurred."
return HttpResponse(msg)
のjQueryコード:
<script type="text/javascript">
function upvote(proposal) {
var request = $.ajax({
type: "POST",
url: "../add_support_vote/",
data: { propid: proposal }
});
request.done(function(msg) {
var cur_votes = $("#votes span").html();
var votes = cur_votes += 1;
$("#votes span").html().fadeOut(1000, function(){
$("#votes span").html(votes).fadeIn();
});
});
request.fail(function(jqXHR, textStatus) {
$("#jsnotify").notify("create", {
title:"Couldn't vote the proposal",
text:"There has been an error." + textStatus,
icon:"alert.png"
});
})
}
</script>
urls.py
urlpatterns = patterns('e_cidadania.apps.proposals.views',
url(r'^$', ListProposals.as_view(), name='list-proposals'),
url(r'^add/$', 'add_proposal', name='add-proposal'),
url(r'^(?P<prop_id>\w+)/edit/$', 'edit_proposal', name='edit-proposal'),
url(r'^(?P<prop_id>\w+)/delete/$', DeleteProposal.as_view(), name='delete-proposal'),
url(r'^(?P<prop_id>\w+)/', ViewProposal.as_view(), name='view-proposal'),
url(r'^add_support_vote/', 'vote_proposal'),
)
テンプレート
<div id="votes">
<span style="font-size:30px;text-align:center;">
{{ proposal.support_votes }}
</span><br/>
<button onclick="upvote({{ proposal.id }})" class="btn small">{% trans "support" %}</button>
</div>
これを忘れた可能性があります:https://docs.djangoproject。com/en/dev/ref/contrib/csrf /#ajax – Ahsan
私はそれを含んでおり、POSTイベントはプラットフォーム内の他の関数でうまくいきますので、ちょっと混乱しています –
相対URL 'url:" ../ add_support_vote/"、' '$ .ajax'には? POSTを許可しない別のビューは、Ajax呼び出しをトリガするページの場所に応じて 'vote_proposal()'の代わりに呼び出されるかもしれないと想像することができます。 –