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を引数に取る理由。

今日は以上!