Day9 Django 基礎
# views def index(request) return render(request, 'blogs/index.html')
これはrenderメソッドでrequest情報を元にして、blogs/index.htmlを返すよという意味。
# models.py def __str__(self): return self.title
とすると、モデルで設定したものを、adminで表示する時に使うことができる。
# views def index(request): blogs = Blog.objects.order_by('-created_datetime') return render(request, 'blogs/index.html', {'blogs':blogs}) # views def index(request): blogs = Blog.objects.order_by('-created_datetime') params = { 'blogs':blogs } return render(request, 'blogs/index.html', params)
ここの、{'blogs':blogs}でテンプレートに渡すことをしている。これは辞書型でキーが'blogs'、値がblogsとなる。またparamsで定義すれば、paramsを渡すこともできる。
#html <a href="{% url 'blogs:detail' blog_id=blog.id%}">記事を読む</a>
これはblogsアプリケーション内のdetailという名前(urls.py)を選択しているという意味。
blog_id=blog.idというのはblog_idという変数にblogのidを代入している。blog.idでidを取れるから、それを変数に代入している。これでid情報をurlに渡すことができる。
・GETメソッド:情報の読み取り、取得、(サーバーからデータを返してほしい時)
・POSTメソッド:情報の送信、投稿、(サーバーに対して何かしらのデータを送りたい時。データベースに新しい情報を追加することができる。)
# views def new(request) if request.method == POST: form = BlogForm(request.POST) ・ ・ ・
・request.POST........ユーザーがフォームに入力した情報が含まれている。その情報を元に新しいBlogFormインスタンスを生成するという処理になる。
・form = BlogForm(request.POST)を引数にrequest.POSTを取るだけでこのような処理ができる。これはBlogFormがModelFormを継承しているから。
# views def edit(request, blog_id): blog = get_object_or_404(Blog, id=blog_id) form = BlogForm(instance=blog) return render(request, 'blogs/edit.html', {'form':form, 'blog': blog})
・form = BlogForm(instance=blog).........instance=Blogで編集内容の中身を保持しておく。
def edit(request, blog_id): blog = get_object_or_404(Blog, id=blog_id) if request.method == "POST": form = BlogForm(request.POST, instance=blog) if form.is_valid(): form.save() return redirect('blogs:detail', blog_id=blog_id) else: form = BlogForm(instance=blog) return render(request, 'blogs/edit.html', {'form':form, 'blog': blog})
・form = BlogForm(request.POST, instance=blog)........編集の時には、既に特定の記事のインスタンスがあるため、どのインスタンスに対してフォームを作用させるかを指定する必要がある。それがinstance=blogを引数に取る理由。
今日は以上!