綺麗な桜が咲く中3.31。
IAIスタジアムに湘南ベルマーレ対清水エスパルスの試合を見に行ってきました。
続きを読む
今回は関数。 つまりpythonですと
def(): フォームを作りたいよ~~~。
という形でフォームを作る方法を書こうと思います。 下の記事でclassを使った方法はすでに記載しました。 https://qiita.com/sr2460/items/a22770f357d8a24403ab
models.py、forms.py、htmlの書き方は上の記事を見てもらうとして、classですとこんな風に書いてフォームを作成していました。
class クラス名(CreateView): model = Post form_class = PostForm template_name = "使用したいテンプレート名" success_url = "リダイレクトするURL"
これを関数で書くと、
from django.shortcuts import render, redirect def form(request): form = PostForm(request.POST or None) if request.method == 'POST' and form.is_valid(): form.save() return redirect(アプリケーション名:リダイレクトしたいurlのname) context = { 'form' :form } return render(request, 'アプリケーション名'/テンプレート名.html', context)
切り取ってみていきましょう。
POSTでurlにアクセスされた場合(フォームは送信された場合)PostFormにrequest(入力内容)が送信されるよ。 POSTじゃない場合はNone(フォーム内は空でhtmlに出力されるよ)というニュアンスです。(なんかうまく説明できない)
form = PostForm(request.POST or None)
もしrequestがPostならバリデーションをして(想定されていない型で送信された場合弾いてくれます)、form.save()で入力内容が保存されます。
if request.method == 'POST' and form.is_valid(): form.save()
フォームを送信した後に飛ぶurlの設定。
return redirect(アプリケーション名:リダイレクトしたいurlのname)
フォームを使用するhtmlをrenderで指定してcontectリストを使ってformの情報をhtmlで使えるようにします。
context = { 'form' :form } return render(request, 'アプリケーション名'/テンプレート名.html', context)
これで関数部分の話は終わり!
クラスの場合urls.pyは
path('使いたいURL', views.クラス名.asview(),name='使いたい名前'),
ですが関数の場合は
path('使いたいURL', views.関数名,name='使いたい名前'),
という風に書きます。views.クラス名.asview()とviews.関数名という違いがありますね。 今回はこれで終わり。
python,djangoでフォームとリストを同時に出力したい。 えっ?そんなこと簡単なんじゃないのと思われるかもしれませんがちょっとコツが要ります。 まずなんで同時に出力できないの?ということを説明しますね。 urls.pyを見てみましょう。
続きを読む#!/usr/bin/env python # -*- coding: utf-8 -*- from django.db import models from django.utils import timezone class Post(models.Model): class Meta: verbose_name = '投稿' verbose_name_plural = '投稿リスト' name = models.CharField('名前', max_length=20, default='ベルマーレ大好き') text = models.TextField('本文') date = models.DateTimeField('日付', default=timezone.now) file = models.FileField('ファイル', null=True,blank=True) good = models.IntegerField(default=0) def __str__(self): return self.text
def vote(request, question_id): form = ChoiceCommentForm(request.POST or None) question = get_object_or_404(Question, pk=question_id) if request.method == 'POST': if form.is_valid(): selected_choice= question.choice_set.get(pk=request.POST['choice']) selected_choice.votes += 1 selected_choice.save() choice_comment = form.save(commit=False) choice_comment.question = question choice_comment.save() return redirect('polls:results', pk=question_id) context = { 'question': question, 'form': form, 'error_message': "投票内容を選んでください", } return render(request, 'polls/detail.html', context)続きを読む
python、djangoのurls.pyで設定するnameってなんやねん?? ということをdjangoをやりはじめた当初はよく分かっていませんでした。 いまでも怪しいのでまとめてみましょう。
djangoをにはurls.py(djangoはurls.pyが2つ存在するのですが、アプリケーションの中にあるurls.pyのことです)にnameと書くことがあります。
続きを読む少し今まで学んだことの復習をしたいです。 今回はdjangoとbottleでのHello World!までの流れを復習します。
djangoはコマンドプロンプトからテンプレートを作成することができます。
コマンドは
py -m django startproject 任意の名前
これでテンプレートをダウンロードできます。
tree ディレクトリ名 /f
コマンドでディレクトリ構成を確認。
│ manage.py │ └─djangotest settings.py urls.py wsgi.py __init__.py続きを読む