Q&A
djangoでログインした後に object_list の投稿一覧と、投稿追加用のフォームを表示するプログラムを書いています。
どうすれば、login直後に 127.0.0.1:8000/で objet_listを表示できるのでしょうか?
投稿追加フォームの一部のみが表示されます。
現在のコード
python
1#project/urls.py 2from django.contrib import admin 3from django.urls import path, include 4 5urlpatterns = [ 6 path("admin/", admin.site.urls), 7 path('',include('registration.urls')), 8]
python
1#app(registration)/urls.py 2from django.urls import path 3 4from . import views 5from registration.views import post_detail 6 7from django.urls import path, include 8from django.contrib.auth.decorators import login_required 9from django.views.generic import TemplateView 10index_view = TemplateView.as_view(template_name="registration/frontpage.html") 11 12urlpatterns=[ 13 path("", login_required(index_view), name="frontpage"), 14 # この1行でdjangoでデフォルトで用意している以下がすべて入ります。 15 # ・ログイン 16 # ・ログアウト 17 # ・パスワード変更 18 # ・パスワード再発行 19 path('', include("django.contrib.auth.urls")), 20 path("<int:pk>/", post_detail, name="post_detail"), 21 path('update/<pk>/', views.Update.as_view(), name="update"), 22 path('delete/<pk>/', views.Delete.as_view(), name="delete"), 23]
python
1#templates/registration/frontpage.html 2{% extends "registration/base.html" %} 3{% block content %} 4 5 <h2 class="subtitle">add post</h2> 6 <form action="." method="post"> 7 {% csrf_token%} 8 {{form.as_p}} 9 <div class="field"> 10 <div class="control"> 11 <button class="button is-danger">submit</button> 12 </div> 13 </div> 14 </form> 15 <br> 16 <hr> 17 18 {% for post in posts %} 19 <!------------------post placed-------------> 20 <div class="post block"> 21 <h2 class="subtitle">{{post.title}}</h2> 22 Due: {{post.due}} 23 <br> 24 {{post.fromwho}} 25 -> 26 {{post.towho}} 27 <br> 28 <p>{{post.body}}</p> 29 <small>Assigned: {{post.posted_date}}</small> 30 <br> 31 <a href="{% url 'update' post.pk %}">edit task</a> 32 <a href="{% url 'delete' post.pk %}">delete task</a> 33 </div> 34 35 <!--------------comment placed----------------> 36 {% for comment in post.comments.all %} 37 <article class = "media"> 38 <div class="media_content"> 39 <div class="content"> 40 <p> 41 <strong> 42 {{comment.name}} 43 <small>{{comment.posted_date}}</small> 44 </strong> 45 <br/> 46 {{comment.body}} 47 </p> 48 </div> 49 </div> 50 </article> 51 <br> 52 53 {% empty %} 54 <div class="notification"> 55 <p>comment is not yet.</p> 56 </div> 57 <br> 58 {% endfor %} 59 60 <a href="{% url 'post_detail' post.pk %}">add comment</a> 61 <br> 62 <br> 63 <hr> 64 65 {% endfor %} 66{% endblock %}
python
1#views.py 2# Create your views here. 3from django.shortcuts import render,redirect 4from registration.forms import CommentForm, PostForm 5from .models import Post 6 7 8def frontpage(request): 9 posts = Post.objects.all() 10 11 if request.method=="POST": 12 form=PostForm(request.POST) 13 14 if form.is_valid(): 15 comment=form.save(commit=False) 16 comment.save() 17 return redirect("frontpage") 18 else: 19 form =PostForm() 20 return render(request, "registration/frontpage.html", {"posts":posts, "form":form}) 21 22 23 24# add comment のため。 25def post_detail(request, pk): 26 post = Post.objects.get(pk=pk) 27 28 if request.method=="POST": 29 form=CommentForm(request.POST) 30 31 if form.is_valid(): 32 comment=form.save(commit=False) 33 comment.post=post 34 comment.save() 35 return redirect("post_detail",pk=post.pk) 36 else: 37 form =CommentForm() 38 39 return render(request, "registration/post_detail.html",{"post":post, "form":form}) 40 41
127.0.0.1:8000/1/ としたところ、post_detail.htmlがコメント追加フォームと一緒に問題なく表示されています。
過去のコード
python
1#project/urls.py 2 3from django.contrib import admin 4from django.urls import path, include 5from django.contrib.auth.decorators import login_required 6 7from django.views.generic import TemplateView 8 9index_view = TemplateView.as_view(template_name="registration/index.html") 10 11urlpatterns = [ 12 path('admin/', admin.site.urls), 13 path("", login_required(index_view), name="index"), 14 path('', include("django.contrib.auth.urls")), 15 path('',include('registration.urls')), 16]
python
1#index.html と、post_list.html どちらも同じ 2 3{% extends "registration/base.html" %} 4{% block main %} 5<h2>記事一覧index</h2> 6<ol> 7 {% for post in object_list %} 8 <li><a href="{% url 'detail' post.id %}">{{ post.title }}</a></li> 9 {% endfor %} 10</ol> 11<p><a href="{% url 'create' %}">新規投稿</a></p> 12{% endblock %}
python
1# app/urls.py 2 3from django.urls import path 4 5from . import views 6 7urlpatterns = [ 8 path('index/', views.Index.as_view(), name="index"), 9 path('detail/<pk>/', views.Detail.as_view(), name="detail"), 10 path('create/', views.Create.as_view(), name="create"), 11 path('update/<pk>', views.Update.as_view(), name="update"), 12 path('delete/<pk>', views.Delete.as_view(), name="delete"), 13]
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2022/12/24 04:10
2022/12/24 05:21 編集
2022/12/24 05:49
2022/12/24 11:54 編集
2022/12/27 12:17
2022/12/28 02:29