2

私はスライドショーを行っていますが、各スライドには次のような URL 形式がありますarticles/1234#slide=5。url.py ファイルの URL からパーツを取得slide=5し、対応するビュー関数に渡し、最後にテンプレートに渡し、適切なスライドをレンダリングしたいと考えています。URL の設定は次のとおりです。

url(r'^(?P<article_id>\d+)#slide=(?P<current_slide>\d{1,2})$', 'articles.views.show_article')

current_slideしかし、URLから変数を取得できないようです。サーバーに転送されていないアンカー部分と関係があると思います。しかし、URL 設定でアンカー部分を無視し、javascript を使用してこのハッシュタグを処理すると、ブラウザーに URL を入力するたびに、最初にアンカー部分のないページがレンダリングされ、次に目的のスライドにジャンプするようです。右のスライドを直接レンダリングすることはできません。どうすればこれを修正できますか?

4

3 に答える 3

5

あなたはあなたの質問でそれを思いつきました。URL のアンカー部分はサーバーに渡されず、クライアント側でのみ使用されます。標準の get パラメータを使用しない理由:

articles/1234?slide=5

この URL 形式に固執しているため、アニメーション化されたスクロールを使用して、これを煩わしくなくしたいと思うかもしれません。この質問への回答jquery Smooth Scroll to an anchor? を確認してください。

于 2013-02-14T22:16:39.840 に答える
2

「ハッシュタグ」をサーバーに送信するブラウザはありません。

これを回避する一般的な方法の1つは、JavaScriptでロード/読み取り時にハッシュタグをキャプチャし、関数を呼び出してページを初期化することです(ajaxを介して)。

また、これの一般的な用語は「hashbangurl」です。その用語で検索すると、より多くの関連情報が見つかります。

#はHTML仕様のページアンカーを指すために使用されるため、ページはジャンプしています。 ブラウザにアンカーにhttp://example.com/gallery/1234#slide5移動するように指示しますslide5http://example.com/gallery/1234

于 2013-02-14T22:18:15.397 に答える
0

アンカー (# の後のビット) は、一致した URL のビットの一部ではありません。これらは、ページ内のアンカー (つまりリンク) に使用されます。それらは通常、サーバーではなくブラウザの利益のためです(ブラウザがページのそのビットにスクロールできるようにするため)が、人々は最近それらを悪用しているようです. それらはサーバーの URL の有用な部分とは見なされないため、Django がそれらを取得しないのは当然のことです。

HTML の古い仕様のドキュメントを次に示しますが、まだ有効です: http://www.w3.org/TR/html4/struct/links.html#h-12.2.3

どうやってするの:

ビューでこれを取得したい場合は、Request オブジェクトを調べます。request.path_infoまたはを参照してくださいrequest.path。これにより、完全な URL が得られます。正規表現を使用して、そこから抽出できます。

import re

input = "articles/1234#slide=5"

m = re.search("#slide=([0-9]*)", input)
try:
    print int(m.group(1))
except ValueError:
    print "didn't get a number"

Rob が言ったように、これには get パラメータを使用する必要があります。

于 2013-02-14T22:23:35.243 に答える