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

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

ただいまの
回答率

90.52%

  • Python

    11241questions

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

  • Django

    1542questions

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

fieldに文字が表示されません。

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 577

s.k

score 249

前提・実現したいこと

フォームに文字を記入した時に文字が表示されるようにしたいです。

発生している問題・エラーメッセージ

URLの部分に文字を記入しましたが下部に赤い点しか表示されません。。。

該当のソースコード

【index.html】

{% extends "guestboard/base.html" %}
{% block title %}Guest Board{% endblock %}
{% block body %}
  <div class="page-header">
    <h1>Guest Board</h1>
  </div>

  {# 画面上段 - 入力フォームを定義する #}
  <form action="{% url 'guestboard:index' %}" method="post">
    <div class="row">
      {% for field in form %}
        <div class="form-group">
          {% if field.errors %}
            <div class="col-sm-10">
              <span class="col-sm-10">{{ field.errors }}</span>
            </div>
          {% endif %}
          <div class="col-sm-10">
            <label class="col-sm-3 control-label">{{ field.label_tag }}</label>
            <label class="label col-sm-7">{{ field }}</label>
          </div>
        </div>
      {% endfor %}
      <div class="col-sm-10">
        <div class="form-group">
          <label class="col-sm-2 control-label"><input type="submit" class="btn btn-primary" value="登録"></label>
          {% csrf_token %}
        </div>
      </div>
    </div>
  </form>

  <hr>
  {# 画面下段 - 投稿内容とページネーター用のパーツを表示する #}
  {% include "guestboard/pagination.html" %}{# ページネーター用のパーツ #}
  <div class="container">
    <div class="row">
      <div class="col-sm-8">
        {% for posting in page %}
          <div class="panel panel-primary">
            <div class="panel-heading">
              <h3 class="panel-title">{{ posting.name }} <label class="small">投稿日時:{{ posting.created_at }}</label></h3>
            </div>
            <div class="panel-body">
              URL:{{ posting.message }}<br>
              記事ID:{{ posting.post_id }}<br>
              選挙日:{{ posting.date }}<br>
            </div>
          </div>
        {% endfor %}
      </div>
    </div>
  </div>
  {% include "guestboard/pagination.html" %}{# ページネーター用のパーツ #}

{% endblock %}

【view.py】

messageフレームワークがundefined variableというエラーがエディタで表示されるのですが
一応動きます。。

from django.core.paginator import (
    Paginator,  # ページネーター本体のクラス
    EmptyPage,  # ページ番号が範囲外だった場合に発生する例外クラス
    PageNotAnInteger  # ページ番号が数字でなかった場合に発生する例外クラス
)
from django.shortcuts import (
    render,
    redirect,
)
from .models import Posting
from .forms import PostingForm

def _get_page(list_, page_no, count=5):
    """ページネーターを使い、表示するページ情報を取得する"""
    paginator = Paginator(list_, count)
    try:
        page = paginator.page(page_no)
    except (EmptyPage, PageNotAnInteger):
        # page_noが指定されていない場合、数値で無い場合、範囲外の場合は
        # 先頭のページを表示する
        page = paginator.page(1)
    return page


def index(request):
    """表示・投稿を処理する"""
    # ModelFormもFormもインスタンスを作るタイミングでの使い方は同じ
    form = PostingForm(request.POST or None)
    if request.method == 'POST':
        if form.is_valid():
            # save()メソッドを呼ぶだけでModelを使ってDBに登録される。
            form.save()
            # メッセージフレームワークを使い、処理が成功したことをユーザーに通知する
            messages.success(request, '投稿を受付ました。')
            return redirect('guestboard:index')
        else:
            # メッセージフレームワークを使い、処理が失敗したことをユーザーに通知する
            messages.error(request, '入力内容に誤りがあります。')
    page = _get_page(
        Posting.objects.order_by('-id'),  # 投稿を新しい順に並び替えて取得する
        request.GET.get('page')  # GETクエリからページ番号を取得する
    )
    contexts = {
        'form': form,
        'page': page,
    }
    return render(request, 'guestboard/index.html', contexts)

【forms.py】

from django import forms
from .models import Posting


class PostingForm(forms.ModelForm):

    class Meta:
        model = Posting
        fields = ('name', 'message', 'post_id', 'date') 
        widgets = {
            'name': forms.TextInput(attrs={'size': 40}),
            'message': forms.Textarea(attrs={'cols': 80, 'rows': 20}),
            'post_id': forms.TextInput(attrs={'cols': 80, 'rows': 20}),
            'date': forms.DateInput(attrs={'cols': 80, 'rows': 20})
        }

ご経験ある方、アドバイスお願いします。

補足情報(言語/FW/ツール等のバージョンなど)

Django '1.10.6'
python '3.4.3'

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

+2

views.pyの先頭に、以下コードを追加してみてください。

from django.contrib import messages

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/10 00:02

    ありがとうございます!messageのエラーは解決できました!!

    キャンセル

  • 2017/03/10 23:34

    何点か確認です。
    ・投稿自体はできるのでしょうか。
    ・ブラウザは何を使用されていますか。

    また、forms.pyのwidgetsの部分を消すと動作はどうなるか試していただいてよろしいですか。

    キャンセル

同じタグがついた質問を見る

  • Python

    11241questions

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

  • Django

    1542questions

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