class-based view
でブログの実装をしています。
CreateView
を使って一旦は記事をフォーム入力できることを確認したのですが、
その後、create.html
にbootstrap
を反映させようとしたところでエラーが発生してつまずいています。
bootstrap
の導入方法について、アドバイスいただけると幸いです。
なお、bootstrap
はdjango-bootstrap4
を使っています。
発生しているエラーメッセージ
Parameter "form" should contain a valid Django Form. Request Method: GET Request URL: http://127.0.0.1:8000/create/ Django Version: 3.1.2 Exception Type: BootstrapError Exception Value: Parameter "form" should contain a valid Django Form. Exception Location: /opt/anaconda3/envs/django-env/lib/python3.9/site-packages/bootstrap4/renderers.py, line 145, in __init__ Python Executable: /opt/anaconda3/envs/django-env/bin/python Python Version: 3.9.0
該当のソースコード
blogproject/templates/create.html
html
1{% extends "base.html" %} 2{% load bootstrap4 %} 3 4{% block title %}ブログ{% endblock %} 5 6{% block content %} 7 8<form class="" action="" method="POST"> 9 {% csrf_token %} 10 {% bootstrap_form form.as_p %} 11 <input type="submit" value="作成する"> 12</form> 13 14{% endblock %}
上記のコードのうち、
html
1 {% bootstrap_form form.as_p %}
を
html
1 {{ form.as_p }}
にしている限りは、問題なく動いています。
因みに、上記とは別ですが、blogproject/templates/list.html
でのbootstrap
の反映は問題なくできています。
その他のコードは以下の通り記述しています。
blogproject/templates/base.html
html
1<!DOCTYPE html> 2{% load bootstrap4 %} 3{% bootstrap_css %} 4{% bootstrap_javascript jquery='slim' %} 5<html lang="ja"> 6 <head> 7 <meta charset="utf-8"> 8 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 9 <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 10 <title>{% block title %}{% endblock %}</title> 11 12 {# --- css --- #} 13 {% block extra_css %}{% endblock %} 14 </head> 15 <body> 16 <main class="container"> 17 {% block content %}{% endblock %} 18 </main> 19 {# --- js --- #} 20 {% block extra_js %}{% endblock %} 21 </body> 22</html>
blogproject/blogpost/views.py
python
1from django.shortcuts import render 2from django.urls import reverse_lazy 3from django.views.generic import ListView, DetailView, CreateView 4 5from .models import BlogModel 6 7 8class BlogList(ListView): 9 """ 一覧表示 """ 10 template_name = 'list.html' 11 model = BlogModel 12 13class BlogDetail(DetailView): 14 """ 詳細表示 """ 15 template_name = 'detail.html' 16 model = BlogModel 17 18class BlogCreate(CreateView): 19 """ 記事作成 """ 20 template_name = 'create.html' 21 model = BlogModel 22 fields = ('title', 'content') 23 success_url = reverse_lazy('list')
blogproject/blogpost/urls.py
python
1from django.urls import path 2from .views import BlogList, BlogDetail, BlogCreate 3 4urlpatterns = [ 5 path('list/', BlogList.as_view(), name='list'), 6 path('detail/<int:pk>/', BlogDetail.as_view(), name='detail'), 7 path('create/', BlogCreate.as_view(), name='create'), 8]
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/17 12:00