DjangoのViews.pyで、とある処理をした後に別のページ(関数)にリダイレクトさせることがあると思います。
上画像のように「チェックボタン」「削除ボタン」がクリックされた際に動く処理があり、最後に同ページにリダイレクトさせています。今回はさらに、「チェック」「削除」どちらのボタンがクリックされたのかを判別させるための引数もリダイレクト先に追加した場合について記載したいと思います。(リダイレクト先がListViewを使用したクラスベース関数であるという前提です。)
view.pyのimportには以下を追加してください。
from django.urls import reverse #追加
まず、ボタンがクリックされた際に動く処理。
def daily_record(request):
is_run = 'false'
if request.method == 'POST':
if 'delete' in request.POST:
deleteID = request.POST.get('delete')
record = daily.objects.get(id=deleteID)
record.delete()
elif 'done' in request.POST:
today_date = datetime.date.today()
yyyymmdd = today_date.strftime('%Y%m%d')
deleteID = request.POST.get('done')
daily_object = daily.objects.get(id=deleteID)
daily_content = daily_object.content
done.objects.create(content=daily_content, date_str=yyyymmdd)
record = daily.objects.get(id=deleteID)
record.delete()
is_run = 'true'
url = reverse('testtest:index_redirect', kwargs={'is_run': is_run})
return redirect(url)
リダイレクト先に引数を渡す箇所をピンポイントで示すとこちらになります。
url = reverse('testtest:index_redirect', kwargs={'is_run': is_run})
return redirect(url)
reverse関数でリダイレクト先のurlを取得します。(testtestアプリ内urls.pyのurlpatternsでname=’index_redirect’と指定したurlを呼び出すという形です。)
kwargsには渡したい引数を記載しましょう。左側の‘is_run’はリダイレクト先で値を取得する際に識別するキーのようなもので、右側のis_runは値が格納された変数です。(ご存じの通りこの2つはそれぞれ違う名称で設定しても全然問題ありません)
リダイレクト先での引数の受け取り方。
def get_context_data(self, **kwargs):
is_run = self.kwargs['is_run']
さらにこの値をtemplatesに反映させる場合は以下のようにcontext.updateに追加します。
context.update({
'is_run': is_run,
#その他省略
})
urls.pyではこのようになります。
app_name = 'testtest'
urlpatterns = [
path('<str:is_run>/', views.index_redirect, name='index_redirect'),
]
渡す値が文字列の場合はstr、数値の場合はintなど型を最初に指定しましょう。
コメント