0

左上から「StackExchange」という通知をクリックすると、SOが新しいページを開き、特定のセクションにジャンプして、そのセクションを黄色で強調表示してフェードアウトすると、SOの効果が気に入っています。

現在、長いウェブサイトの下部にコメントフォームがあります。コメントの投稿が検証に失敗した場合、jQueryを使用してフォームにスクロールし、SOと同じ黄色のハイライト効果を実行します。

これが私の(完全に機能する)コードです:

$(document).ready(function() {
    {% if focus %}
        // Focus
        $('html, body').animate({scrollTop: $('#{{ focus }}').offset().top }, 'slow')
        $('#{{ focus }}').effect("highlight", {}, 3000)
    {% endif %}
})

私はこのコードを持っているbase.htmlので、すべてのテンプレートが。というテンプレート変数をチェックしますfocus。は、黄色のハイライト効果を実行するためののfocusを保持する単純な文字列です。id<div>

ご覧のとおり、これは少しハッキングされているように感じます。Djangoのfocusを使用して辞書を渡す必要があります。render()views.py

私が本当にやりたいのは、それをGET変数として渡すことです。のようなものhttp://www.example.com/orders/2/?focus=comment_form。次に、 Javascriptを使用してその変数を取得GETし、ハイライト効果を実行できます。GETしかし、を使用して変数を渡す方法がわかりませんrender()

現在、私のようにrender()見えます:

dictionary = get_orders_detail_dictionary(order=order, user=request.user, comment_form=form)
dictionary['focus'] = 'comment_form'
return render(request, 'doors/orders/detail.html', dictionary)

私がaを使いたい理由GETは、「パーマリンク」オプションのようなものです。

4

1 に答える 1

2

これはGET変数であるため、から入手できますrequest.GET。また、renderショートカットを使用しているので、requestコンテキストプロセッサを有効requestにして、テンプレートでオブジェクトを使用できるようにすることができます。その時点で、実行できます{{ request.GET.focus }}

ただし、私にとってより良いオプションは、フォーカスパラメータをコンテキスト変数に抽出する独自のカスタムコンテキストプロセッサを使用することです。

def get_focus(request):
    return {'focus': request.GET.get('focus', '')}

{{ focus }}そうすれば、今とまったく同じように使用できます。

于 2012-04-23T08:05:37.613 に答える