forms.html テンプレートからフォームをロードしている index.html テンプレート:
{% extends 'base.html' %}
{% load static %}
{% block title %} jQuery Load Function {% endblock %}
{% block extrahead %}
<script type="text/javascript" src=" {% static "learn_static_files/scripts/jquery.min.js" %} "></script>
<script>
$('document').ready(function(){
$("#register").on("click", function(){
$("#register_signup").load("{% url 'learn.views.get_latest_news' %} #register");
});
$("#signIn").on("click", function(){
$("#register_signup").load("{% url 'learn.views.get_latest_news' %} #signin");
});
});
</script>
{% endblock %}
{% block content%}
<div id="register">Register</div>
<div id="signIn">Sign In</div>
<div id="register_signup"></div>
{% endblock %}
csrf トークンを含むフォームの読み込み元の forms.html:
{% extends 'base.html' %}
{% block content %}
<div id="register">
<form action="/learn/register/" method="post">
{% csrf_token %}
<p>
<label for="name">name</label>
<input type="text" placeholder="name" name="name">
</p>
<p>
<label for="username">Username</label>
<input type="text" placeholder="username" name="username">
</p>
<p>
<label for="password">Password</label>
<input type="password" name="password">
</p>
<p>
<label for="varify_password">Varify Password</label>
<input type="password" name="varify_password">
</p>
<p>
<input type="submit" name="register" value="register">
</p>
</form>
</div>
<div id="signin">
<form action="/learn/sign_in/" method="post">
{% csrf_token %}
<p>
<label for="username">Username</label>
<input type="text" placeholder="username" name="username">
</p>
<p>
<label for="password">Password</label>
<input type="password" name="password">
</p>
<p>
<input type="submit" name="signin" value="sign in">
</p>
</form>
</div>
{% endblock %}
ビュー.py:
from django.shortcuts import render_to_response
from django.template.loader import render_to_string
from django.template import RequestContext
from learn.models import Registration
from learn.forms import RegistrationForm
from django.contrib.auth.models import User
def index(request):
return render_to_response('index.html')
def get_latest_news(request):
return render_to_response('forms.html')
def register(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
user = User(username=form.cleaned_data['username'],password=form.cleaned_data['password'])
user.save()
registered_user = Registration(user=user, name=form.cleaned_data['name'])
registered_user.save()
return HttpResonse('form is successfully submitted')
else:
return render_to_response('forms.html',{'form':form},context_instance=RequestContext(request))
else:
form = RegistrationForm()
return render_to_response('forms.html',{'form':form},context_instance=RequestContext(request))
クリックイベントでインデックスページの div#register_signup で jquery.load 関数を呼び出しています。登録フォームが登録ビューを使用して URL から直接呼び出された場合、問題なく表示され、csrf_token もそこで利用できますが、jquery ロード関数を介してこのフォームをロードすると、csrf トークンが欠落します。
私が間違っているところを教えてください。index.html 内に登録およびサインイン フォームをロードしたいと考えています。