3

Djangoフォームの検証に失敗すると、フォームが失敗したページに自動的に戻りますが、ページのhtmlアンカーに移動したいと思います。これが私が持っているコードです:


def detail(request, post_id):
    p = get_object_or_404(Post, pk=post_id)
    # get all the comments for the post
    comments = p.comment_set.all().order_by('pub_date')
    # to add a comment to the post
    if request.method=='POST':
        form = CommentForm(request.POST)
        if form.is_valid():
            c = Comment()
            c.body = request.POST['body']
            c.post = p
            c.save()
            return HttpResponseRedirect(reverse('journal.views.detail', kwargs={'post_id': post_id}) + "#comment-" + str(c.id))
    else:
        form = CommentForm()
    return render(request, 'posts/detail.html', {'post': p, 'comments': comments, 'form': form})

フォームは、ブログ投稿の下部にあるコメントフォームです。フォームが無効な場合は、ページの下部にあるコメントフォームのhtmlアンカーにジャンプします。現在、ページの上部に移動し、下にスクロールしてエラーがあることを確認する必要があります。

うまくいかなかったいくつかのことを試しました。助けてください!

4

4 に答える 4

1

1 つの方法は、辞書に追加のキーと値のペアを渡してアンカー名を含め、必要に応じてテンプレートで JavaScript を使用してジャンプすることです。

Python 側:

// ...
return render(request,
              'post/detail.html',
              {
                  // ...
                  'anchor': 'comment'
              })

テンプレート:

function goToOnLoadAnchor()
{
    window.location.hash('{{ anchor }}');   // Or something with the same effect
}

{% ... %}
<body onload="goToOnLoadAnchor">
{% ... %}

カスタム テンプレート タグを利用して、柔軟性を高めることもできます。

于 2012-12-08T04:24:52.190 に答える
0

CBV & jQuery

フォームビュー

def form_invalid(self, form):
    return self.render_to_response(self.get_context_data(form=form, anchor='my-form'))

テンプレート

<form ... id='my-form'> ... </form>
<script>
    $(function () {
        {% if anchor %}
            $(document.body).animate({
                'scrollTop':   $('#{{ anchor }}').offset().top
            }, 2000);
        {% endif %}
    });
</script>

(ジャンプではなく) スクロールに jQuery を使用します。

于 2014-11-13T04:37:30.107 に答える