ランダムおすすめ記事

ホームページ作りました

djangoの関数でデータを格納するcontext辞書はbottleではどう設定する?

def vote(request, question_id):
    form = ChoiceCommentForm(request.POST or None)
    question = get_object_or_404(Question, pk=question_id)


    if request.method == 'POST':
        if form.is_valid():
            selected_choice= question.choice_set.get(pk=request.POST['choice'])
            selected_choice.votes += 1
            selected_choice.save()
            choice_comment = form.save(commit=False)  
            choice_comment.question = question
            choice_comment.save() 
            return redirect('polls:results', pk=question_id)

        context = {
            'question': question,
            'form': form,
            'error_message': "投票内容を選んでください",
        }
        return render(request, 'polls/detail.html', context)

djangoの関数内でこんな風に書くことがありますよね。

    context = {
        'question': question,
        'form': form,
        'error_message': "投票内容を選んでください",
    }
    return render(request, 'polls/detail.html', context)



これはpythonの基本で学ぶリストですよね。

context = { 'question': question, 'form': form, 'error_message': "投票内容を選んでください", }


こう横に並べたほうがリストだと認識できる気がします。習いましたよね、これ。 これはリストをhtmlに送ることでhtml内でそのデータや設定を使えるようにしているのです。 分かりやすく並べてみましょうか。

form = ChoiceCommentForm(request.POST or None)

context = {
'form': form,
}
question = get_object_or_404(Question, pk=question_id)

context = {
'question': question,
}
'error_message': "投票内容を選んでください",




return render(request, 'polls/detail.html', context)

renderと記載してpollsアプリケーションのdetail.htmlにcontextリストに含まれたデータや設定を使用できるようになります。
htmlには例えばこんな記載があるんですが

<strong>{{ question.question_text }}の投票画面</strong>


このquestionは

question = get_object_or_404(Question, pk=question_id)

context = {
'question': question,
}


こっちのほうになります。

'question': 

'question':キーを呼び出してそこからvalueである右側のquestionを呼び出しているんですね。
ついでですが

question = get_object_or_404(Question, pk=question_id)

のQuestionはmodels.pyに格納されている

class Question(models.Model):

のことで、このクラスの中の

question_text = models.CharField(max_length=200)

このデータを呼び出しています。


さて、このような機能はbottleではこう書きます。

@route('/douinyosoku/1/')
def audience_mobilization():
    input_text = '観客動員予測や質問を入力してください'
    output_text='こんにちは!\n湘南ベルマーレ観客動員予測システムの\n「観客動員予測1号」です。\nよろしくお願いいたします!'
    return template('template', input_text=input_text, output_text=output_text, input_text_conversion='')


routeの下に直接関数を書き込んでtemplateに送信するのです。 ただdjangoのようにリストで色々送信できるかは不明です。 models.py自体がbottleには存在しませんし。 ・・・。

input_text = {'1':'観客動員予測や質問を入力してください', '2': 'こんにちは!\n湘南ベルマーレ観客動員予測システムの\n「観客動員予測1号」です。\nよろしくお願いいたします!'}

のような書き方がは出来ると思いますが・・・。 bottleで何かを作る機会がほとんどなかったため実験したことが無いのですが、機会があればいろいろ試してみたいです。