Django入門ブログ構築 3日目
やったこと
views.py 追記部分- class PostEditView(LoginRequiredMixin, View):def get(self, request, *args, **kwargs):post_data = Post.objects.get(id=self.kwargs['pk'])form = PostForm(request.POST or None,initial = {'title':post_data.title,'content': post_data.content})return render(request, 'app/post_form.html',{'form': form})def post(self, request, *args, **kwargs):form = PostForm(request.POST or None)if form.is_valid():post_data =Post.objects.get(id=self.kwargs['pk'])post_data.title = form.cleaned_data['title']post_data.content = form.cleaned_data['content']post_data.save()return redirect('post_detail', self.kwargs['pk'])return render(request, 'app/post_form.html', {'form':form})class PostDeleteView(LoginRequiredMixin, View):def get(self, request, *args, **kwargs):post_data = Post.objects.get(id=self.kwargs['pk'])return render(request, 'app/post_delete.html',{'post_data': post_data})def post(self, request, *args, **kwargs):post_data = Post.objects.get(id=self.kwargs['pk'])post_data.delete()return redirect('index')
- from django.urls import pathfrom app import viewsurlpatterns = [path('',views.IndexView.as_view(), name='index'),path('post/<int:pk>', views.PostDetailView.as_view(),name='post_detail'),path('post/new', views.CreatePostView.as_view(),name='post_new'),path('post/<int:pk>/edit/', views.PostEditView.as_view(),name='post_edit'),path('post/<int:pk>/delete/', views.PostDeleteView.as_view(),name='post_delete'),]
post_form.html
{% extends "app/base.html" %}
{% load widget_tweaks %}
{% block content %}
<div class="my-4">
<h2>投稿</h2>
</div>
<form method="post">
{% csrf_token %}
<div class="formpost">
{% render_field form.title class="form-control" placeholder="タイトルを入力" %}
</div>
<div class="formpost">
{% render_field form.content class="form-control" placeholder="本文を入力" %}
</div>
<button class="btm btn-warning" type="submit">投稿する</button>
</form>
{% endblock %}
post_detai.html
{% extends "app/base.html" %}
{% block content %}
<h2 class="my4">{{ post_data.title }}</h2>
<hr>
<p>{{ post_data.created }} by {{post_data.auther }}</p>
<p>{{ post_data.content|linebreaksbr}}</p>
{% if user.is_authenticated %}
<hr>
<div class="d-flex mb-5">
<a href="{% url 'post_edit' post_data.id %}" class="btn btn-warring mr-2">編集する</a>
<a href="{% url 'post_delete' post_data.id %}" class="btn btn-danger">削除する</a>
</div>
{% endif %}
{% endblock%}
post_delete.html
{% extends "app/base.html" %}
{% block content %}
<h2 class="my-4">{{ post_data.title }}</h2>
<hr>
<h5 class="my-4">削除してもよろしいですか?</h5>
<form method="post">
{% csrf_token %}
<button class="btn btn-danger" type="submit">削除する</button>
</form>
{% endblock %}
わかったこと
- 感覚的にではあるがファイル間のつながりがわかってきた。
- テンプレート言語の書き方もまだ感覚的。
つぎやること
- 認証機能
コメント
コメントを投稿