Progateで作ったWebアプリをDjangoで作ってみる2! Part7 -DetailView編-
目標物の確認
ProgateのNode.jsコースで作ったブログアプリと同じものをDjangoで作ってみます。
Djangoでのアプリ開発の一連の流れを整理するために記していきます。
記事画面の作成
個々の記事はDetailViewというViewで表示させます。
まずはHTMLファイル(article.html)を作成します。
Part6で作成したbase.htmlを継承して(☆1)、{% block content %}
{% endblock content %}
の中に個別記事を表示するコードを書いていきます(☆2)。
記事が「全員(object.category == 'all'
)」の場合、コンテンツが表示されるようにします(☆3)。記事が、「会員限定(object.category == 'limited'
)」の場合、タイトルは表示されるが、コンテンツはログインされている場合(user.is_authenticated
)は表示されるようにします(☆4)。ログインされていない場合は、コンテンツは表示されず、ログイン画面へのリンクが表示されるようします(☆4)。
{% extends 'blog/base.html' %} <!--☆1-->
{% load static %}
{% block content %} <!--☆2-->
<main>
<div class="article">
{% if object.category == 'all' %} <!--☆3-->
<h1>{{ object.title }}</h1>
<p>{{ object.content }}</p>
{% endif %} <!--☆3-->
{% if object.category == 'limited' %} <!--☆4-->
<i>会員限定</i>
<h1>{{ object.title }}</h1> <!--☆4-->
{% if user.is_authenticated %} <!--☆4-->
<p>{{ object.content }}</p> <!--☆4-->
{% else %} <!--☆4-->
<div class="article-login">
<p>今すぐログインしよう!</p>
<p>記事の続きは<br>ログインすると読むことができます</p>
<img src="{% static 'blog/login.svg' %}">
<a class="btn" href="{% url 'blog:login' %}">ログイン</a>
</div>
{% endif %} <!--☆4-->
{% endif %} <!--☆4-->
</div>
</main>
<footer>
<a class="btn sub" href="{% url 'blog:list' %}">一覧にもどる</a>
</footer>
{% endblock content %} <!--☆2-->
views.pyファイルを作成していきます(☆5)。
from blog.models import BlogModel
from django.shortcuts import render, redirect
from django.views.generic import TemplateView, ListView, DetailView # ☆5
from django.contrib.auth.models import User
from django.db import IntegrityError
from django.contrib.auth import authenticate, login, logout
from .models import BlogModel
class BlogTop(TemplateView):...
def signupview(request):...
def loginview(request):...
def logoutview(request):...
class BlogList(ListView):...
class BlogArticle(DetailView): # ☆5
template_name = 'blog/article.html'
model = BlogModel
urls.pyファイルも作成します(☆6)。
<int:pk>
が、テーブルに入っているデータを具体的に指定する上で使われるコードです(☆6)。
from django.urls import path
from .views import BlogTop, signupview, loginview, logoutview, BlogList, BlogArticle # ☆6
app_name = 'blog'
urlpatterns = [
path('', BlogTop.as_view(), name='top'),
path('signup/', signupview, name='signup'),
path('login/', loginview, name='login'),
path('logout/', logoutview, name='logout'),
path('list/', BlogList.as_view(), name='list'),
path('article/<int:pk>/', BlogArticle.as_view(), name='article') # ☆6
]
ログインの有無でページの表示が変わっています。
成功です!
Author And Source
この問題について(Progateで作ったWebアプリをDjangoで作ってみる2! Part7 -DetailView編-), 我々は、より多くの情報をここで見つけました https://qiita.com/insilicomab/items/e2237f890ac77a6f3cbf著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .