質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • Python 3.x

    6917questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Django

    1119questions

    DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

djangoのurl関数のパラメータについて

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,469

mofu_mofu

score 30

いつもお世話になっております。

前提と疑問点

最近djangoを使い始めて、かなり初歩的な質問で大変恐縮なのですが、urls.pyで使う以下のurl関数で文法的に疑問に思うところがあります。

下記の①の意味は「アドレスがaccounts/であればaccountsビューのindexに飛んでください」という意味だと思いますが、なぜわざわざnameパラメータを指定するのかが知りたいです。

下記の②について、通常はviews.pyでdjango.shortcuts.render()の第二引数にテンプレート名を渡すと思うのですが、ここではurls.pyでテンプレートを渡しています。これはauth_views.loginがdjango組み込みのパッケージで書き込むと大変になる可能性があるため避けているというのが理由でしょうか?

以上になりますが、どうぞよろしくお願いいたします。

from django.conf.urls import url, include
url(regex, view, kwargs=None, name=None, prefix='')


Django 1.4 documentation - URL ディスパッチャより

#accounts/urls.py

from django.conf.urls import url
from django.contrib.auth import views as auth_views

from . import views

app_name = 'accounts'
urlpatterns = [
①    url(r'^$', views.index, name='index'),
②    url(r'^login$', auth_views.login, {'template_name': 'accounts/login.html'}, name='login'),
    url(r'^logout$', auth_views.logout, name='logout'),
]

バージョン

(myenv) > pip freeze
dj-database-url==0.4.2
Django==1.11
gunicorn==19.7.1
psycopg2==2.7.3.2
pytz==2017.3
whitenoise==3.3.1

(myenv) > python -V
Python 3.6.4
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

1 については
URL パターンに名前を付けるに記載があります。
nameが指定されていると、template内などからnameで指定されたurl文字列を取得できます。
template側で

<a href="{% url index %}">topへ</a>


と記載すると /へのリンクが作成できます。
同様に

{% url login %}
{% url logout %}


で /login や /logout へのpath文字列が得られます。

2 については、
ビュー関数に追加のオプションを渡すに記載があります。
ここではrenderに渡すためのtemplateを指定しているように見えますが、
ビューに渡す名前付き引数を指定しているだけです。
同じビューを使いたいが、渡す変数の中身を変えたいという場合に利用します。

例えば

auth_views.login(request, template_name=None):
  some sentence


という形でviewが定義されている状態で

url(r'^login$', auth_views.login, {'template_name': 'accounts/login.html'}, name='login')
url(r'^login_confirm$', auth_views.login, {'template_name': 'accounts/confirm.html'}, name='login_confirm')


という記載をすると、それぞれ

auth_views.login(request,tempalte_name='accounts/login.html')
auth_views.login(request,tempalte_name='accounts/confirm.html')


が呼ばれます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/08 18:51

    calkinosさま
    お礼が遅くなり大変申し訳ございません。

    ①はindexはそのURLのニックネームみたいなもので、それをテンプレートでそのニックネームを呼び出すとそのURLに飛んでくれるのですね。
    ②は同じビューを使用するが違うテンプレートを使いたいときに使ったりするのですね。

    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python 3.x

    6917questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Django

    1119questions

    DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。