26

例として:

view.py

def view1( request ):
    return HttpResponse( "just a test..." )

urls.py

urlpatterns = patterns('',
    url( r'^view1$', 'app1.view.view1'),
)

のURLパスを取得したいview1。これどうやってするの。「xxx/view1」などの URL パスをハード コーディングすることは避けたいと考えています。

4

7 に答える 7

44

が必要reverseです。

from django.urls import reverse

reverse('app1.view.view1')

URLを見つけてそこにリダイレクトしたい場合は、redirect

from django.urls import redirect 

redirect('app1.view.view1')

さらに進んで、ビュー名もハードコーディングしたくない場合は、URL パターンに名前を付けて、代わりにこれらの名前を使用できます。

于 2012-05-10T11:49:43.497 に答える
17

これは、取得するかどうかによって異なります。ビュー (python コード) で URL を取得する場合は、reverse関数 (ドキュメント)を使用できます。

reverse('admin:app_list', kwargs={'app_label': 'auth'})

テンプレートで使用したい場合は、urlタグ ( documentation )を使用できます。

{% url 'path.to.some_view' v1 v2 %}
于 2012-05-10T11:53:27.603 に答える
5

view1 の URL を view1 に入れたい場合は、request.get_path() が最適です。

于 2012-05-10T12:03:27.820 に答える
4

他の人が言ったように、これにはreverse関数とurlテンプレートタグを使用できます(使用する必要があります)。

URLパターンに名前を追加することをお勧めします

urlpatterns = patterns('',
    url( r'^view1$', 'app1.view.view1', name='view1'),
)

この名前のおかげでそれを逆転させる

reverse('view1')

これにより、コードのリファクタリングが容易になります

于 2012-05-10T12:04:40.157 に答える
3

はい、もちろん、URL をハードコーディングせずに「view1」という名前のビューの URL パスを取得できます。

Django urlresolvers から 'reverse' 関数をインポートするだけです。

以下のコード例を見てください。

from django.core.urlresolvers import reverse

from django.http import HttpResponseRedirect

def some_redirect_fun(request):

    return HttpResponseRedirect(reverse('view-name'))
于 2015-09-21T11:40:41.870 に答える
1

これにはリバース機能を使用できます。リファクタリングを容易にするために、それぞれ url-includes と url の名前空間と名前を指定できます。

于 2012-05-10T11:50:24.530 に答える
1

普遍的なアプローチ

  1. Django 拡張機能をインストールし、INSTALLED_APPS に追加します

  2. 対応するビュー関数を含むすべての URL を含むテキスト ファイルを生成します

./manage.py show_urls --format pretty-json --settings=<path-to-settings> > urls.txt

お気に入り

./manage.py show_urls --format pretty-json --settings=settings2.testing > urls.txt

  1. 出力ファイルで URL を探しますurls.txt
    {
        "url": "/v3/blockdocuments/<pk>/",
        "module": "api.views.ganeditor.BlockDocumentViewSet",
        "name": "block-documents-detail",
    },
于 2020-11-13T08:18:39.103 に答える