1

複数のビュー関数によって提供される単一のテンプレートがあります。例として、read_posts() ビューは GET ですべての投稿を返し、add_post() ビューは POST で新しい投稿を追加します。

同じページに他の投稿アクションがあり、さらに表示機能が必要な場合があります。

ここで、これらのビュー関数はそれぞれ、異なる引数をテンプレートに渡す必要があります。たとえば、フォームごとに異なるフォーム引数を渡す必要がある場合があります。

複数のビュー関数から単一のテンプレートへの複数の引数を整理する際のベスト プラクティスは何ですか?

例として、posts.html は私が使用するテンプレートです。

<html>
    <head>
      <title>My Django Blog</title>
    </head>
    <body>
        <form action="{% url 'blog:add_post' %}" method="post">
             {% csrf_token %}
             <p><input type="text" name="title" id="title" /></p>
             <p><input type="textarea" name="text" id="text" /></p>
             <input type="submit" value="Submit" />
        </form>
        {% for post in posts %}
        <h1>{{ post.title }}</h1>
        <h3>{{ post.pub_date }}</h3>
        {{ post.text }}
        {% endfor %} 
    </body>
</html>                      

私が使用するビューは次のとおりです。

def display_posts(request):
    #All posts
    posts = Post.objects.all()
    sorted_posts = posts.order_by('-pub_date')
    context = { 'posts' : sorted_posts }
    return render(request, 'blog/posts.html', context)

def add_post(request):
    if request.method == 'POST':
        form = PostForm(request.POST)
        #return HttpResponse('Hello World')
        if form.is_valid():
            post = Post()
            post.title = form.cleaned_data['title']
            post.text = form.cleaned_data['text']
            post.pub_date = datetime.now()
            post.save()
            return HttpResponseRedirect(reverse('blog:display_posts'))
        else:
            form = PostForm() # An unbound form
    return render(request, "blog:display_posts")

ご覧のとおりdisplay_posts()、ページがリクエストされたときのデフォルトの GET でありadd_post()、新しい投稿が作成されたときに http POST を処理します。

各関数はページのさまざまな機能を処理しており、テンプレートに渡されるさまざまなコンテキスト変数が必要です。display_posts(まだコンテキストのみを使用していることに注意してください)

各関数が異なるコンテキストをページに送信し、それらをテンプレートで適切に整理するにはどうすればよいですか?

1 つのページで複数のフォームを処理する場合、それらに部分的なテンプレートを使用し、それらをメイン ページに %include しますか?

ありがとう。

4

0 に答える 0