質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

653閲覧

djangoで object_list を出力して表示することが、とある条件下でできなくなります。

alizona

総合スコア126

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/12/23 13:40

編集2022/12/27 12:39

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:&nbsp;&nbsp;{{post.due}} 23 <br> 24 {{post.fromwho}} 25 &nbsp;->&nbsp; 26 {{post.towho}} 27 <br> 28 <p>{{post.body}}</p> 29 <small>Assigned:&nbsp;&nbsp;{{post.posted_date}}</small> 30 <br> 31 <a href="{% url 'update' post.pk %}">edit task</a>&nbsp;&nbsp;&nbsp; 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 &nbsp;&nbsp;&nbsp;&nbsp;{{comment.name}} 43 &nbsp;&nbsp;&nbsp;&nbsp;<small>{{comment.posted_date}}</small> 44 </strong> 45 <br/> 46 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{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 &nbsp;&nbsp;&nbsp;&nbsp;<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]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

urlpatternsとして、'index/'を定義していると思いますが、ルートのパスで参照させたいのであれば、''を定義する必要がないでしょうか。

python

1path('index/', views.Index.as_view(), name="index"),

python

1from django.urls import path 2 3from . import views 4 5app_name = 'polls' 6urlpatterns = [ 7 path('', views.IndexView.as_view(), name='index'), 8 path('<int:pk>/', views.DetailView.as_view(), name='detail'), 9 ... 10]

投稿2022/12/24 02:20

knuser

総合スコア178

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

alizona

2022/12/24 04:10

回答ありがとうございます。 path('', views.Index.as_view(), name="index"), のようにしたところ、index.htmlが ルートパスに表示されるのですが、 index.htmlでは object_listを取得することはできません。 しかし、path('index/', views.Index.as_view(), name="index"), のようにすると、 127.0.0.1:8000/index にて、post_list.htmlを表示することができます。
knuser

2022/12/24 05:21 編集

補足ありがとうございます。アドホックな情報ですいませんが、`project/urls.py`にある`path("", login_required(index_view), name="index"),`が優先的に判断されてしまい、静的なHTMLが出力されているのかなと思うのですが、 例えば、この行をコメントアウトして、`app/urls.py`側の定義でlogin_requiredを求めるようにするとどうでしょうか。 path('', login_required(views.IndexView.as_view()), name='index'), login_requiredは、viewの定義や、urlpatternsや、Middlewareなど色々な場所で記載できると思いますので、定義を集約したい場合は、別の場所で定義するのも選択肢だとは思うのですが。
alizona

2022/12/24 05:49

ありがとうございます。 from django.contrib.auth.decorators import login_required urlpatterns = [ path('', login_required(views.IndexView.as_view()), name='index'), のようにしたところ、 This site can’t be reached127.0.0.1 refused to connect. Try: Checking the connection Checking the proxy and the firewall ERR_CONNECTION_REFUSED このようにconnection が refuse されました。
knuser

2022/12/24 11:54 編集

上記のエラーは、ブラウザ側に表示されているということですよね。DjangoのConsoleにエラーは出力されていないでしょうか?(IndexViewに関してエラーなど出力されていないでしょうか?)
alizona

2022/12/27 12:17

回答いただきましてありがとうございます。 ログイン後に出力したいページは、 オリジナルの独自viewでしたので、 index_view = TemplateView.as_view(template_name="registration/frontpage.html") urlpatterns=[ path("", login_required(index_view), name="frontpage"), のようにしました。 また、何度も作り直したり、機能を限定して作ったりして、理解は深まったのですが、どうしても 127.0.0.1/8000/ で投稿一覧と、add post form を表示させることができません。
alizona

2022/12/28 02:29

views.py のなかで、 from django.contrib.auth.decorators import login_required @login_required def frontpage(request): のようにしたところできました。 app/urls.py には path('', include("django.contrib.auth.urls")), を入れました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問