18

私は現在、Djangoのredirect()メソッドを使用して、リダイレクト先のURLを作成しています。URLをハードコーディングしたくないので、次のように実行しています。

return redirect('main.views.home', home_slug=slug)

それは私を次のようなものに連れて行きます:

/ home / test-123 /

ただし、特定のURLのクライアント側の追跡を追加しているので、最後にアンカーを使用して、次のような初めてのユーザーアクセスなどを識別したいと思いました。

/ home / test-123 /#first

上記のURLをredirect()メソッドにハードコーディングする以外に、構築したURLの末尾にアンカーを追加するためのより洗練された代替手段はありますか?

ありがとう、G

4

3 に答える 3

33

redirect() URLを受け入れます。これを使用して、URLreverse() を取得し、ハッシュ部分を追加できます。

from django.core.urlresolvers import reverse

return redirect(reverse('main.views.home', kwargs={'home_slug':slug}) + '#first')
# or string formatting
return redirect('{}#first'.format(reverse('main.views.home', kwargs={'home_slug':slug})))

django.shortcuts.resolve_urlまた、次のようなショートカットがあります。

'{}#first'.format(resolve_url('main.views.home', home_slug=slug))

Django 2.0の編集、使用: from django.urls import reverse

于 2012-06-23T04:27:27.583 に答える
8

[Django 1.8までしか機能せず、Django 1.9以降では機能しません。コメントを参照してください!]

urls.pyの正規表現にアンカーを追加できます。これは、スレッド内の目的の投稿にジャンプするサンプルフォーラムアプリの例です。

views.py

return redirect(post_list, 
    slug=post.thread.slug, 
    page=1, 
    anchor='post_{0}'.format(post.id)
)

urls.py

url(r'^thread/(?P<slug>[-\w]+)/(?P<page>[0-9]+)/#(?P<anchor>[-_\w]+)$', post_list, name='forum_view_thread'),
url(r'^thread/(?P<slug>[-\w]+)/(?P<page>[0-9]+)/$', post_list, name='forum_view_thread'),
url(r'^thread/(?P<slug>[-\w]+)/$', post_list, name='forum_view_thread'),
于 2014-03-01T03:41:58.500 に答える
0

使用するだけです:

url(r'^app/#/welcome/$', SomeView.as_view(), name='welcome'),

from django.utils.encoding import uri_to_iri
uri_to_iri(urlresolvers.reverse('welcome'))
于 2018-06-27T12:55:59.933 に答える