PythonのDjangoフレームワークにおけるURLconfに関するいくつかのテクニックの整理
1680 ワード
ビュー構成オプションの提供
Djangoのアプリケーションを公開すると、ユーザーは構成上の自由度を望んでいる可能性があります.この場合、ユーザーが変更したい構成オプションにフックをビューに追加するのは良いアイデアです.追加のURLconfパラメータで実現できます.
1つのアプリケーションで一般的な構成コードはテンプレート名です.
スナップ値と追加パラメータの優先度の追加オプションについて
競合が発生した場合、追加のURLconfパラメータはスナップ値よりも優先されます.すなわち、URLconfがキャプチャした名前付きグループ変数と、追加のURLconfパラメータに含まれる変数が同じ名前である場合、追加のURLconfパラメータの値が使用されます.
例えば、次のURLconfは、
ここで、正規表現と追加辞書にはidが含まれています.ハードコーディング(追加辞書)idが優先されます.つまり、任意のリクエスト(例えば、/mydata/2/または/mydata/432/)は、URLにどのような値がキャプチャされているかにかかわらず、idを3つに設定します.
賢い読者は、idの値が常に辞書の値に上書きされるため、正規表現にスナップを書くのは時間の無駄であることを発見します.そう、私たちがこの目的を言ったのは、あなたがこのような間違いを犯さないようにするためだけです.
デバッグモードの例外
urlpatternsの動的構築といえば、DjangoのデバッグモードでURLconfの動作を変更するために、この技術を利用したいかもしれません.これを行うには、以下のように、実行時にDEBUGプロファイルの値を確認します.
この例では、URLリンク/debuginfo/は、あなたのDEBUGプロファイルがTrueに設定されている場合にのみ有効です.
Djangoのアプリケーションを公開すると、ユーザーは構成上の自由度を望んでいる可能性があります.この場合、ユーザーが変更したい構成オプションにフックをビューに追加するのは良いアイデアです.追加のURLconfパラメータで実現できます.
1つのアプリケーションで一般的な構成コードはテンプレート名です.
def my_view(request, template_name):
var = do_something()
return render_to_response(template_name, {'var': var})
スナップ値と追加パラメータの優先度の追加オプションについて
競合が発生した場合、追加のURLconfパラメータはスナップ値よりも優先されます.すなわち、URLconfがキャプチャした名前付きグループ変数と、追加のURLconfパラメータに含まれる変数が同じ名前である場合、追加のURLconfパラメータの値が使用されます.
例えば、次のURLconfは、
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = patterns('',
(r'^mydata/(?P\d+)/$', views.my_view, {'id': 3}),
)
ここで、正規表現と追加辞書にはidが含まれています.ハードコーディング(追加辞書)idが優先されます.つまり、任意のリクエスト(例えば、/mydata/2/または/mydata/432/)は、URLにどのような値がキャプチャされているかにかかわらず、idを3つに設定します.
賢い読者は、idの値が常に辞書の値に上書きされるため、正規表現にスナップを書くのは時間の無駄であることを発見します.そう、私たちがこの目的を言ったのは、あなたがこのような間違いを犯さないようにするためだけです.
デバッグモードの例外
urlpatternsの動的構築といえば、DjangoのデバッグモードでURLconfの動作を変更するために、この技術を利用したいかもしれません.これを行うには、以下のように、実行時にDEBUGプロファイルの値を確認します.
from django.conf import settings
from django.conf.urls.defaults import *
from mysite import views
urlpatterns = patterns('',
(r'^$', views.homepage),
(r'^(\d{4})/([a-z]{3})/$', views.archive_month),
)
if settings.DEBUG:
urlpatterns += patterns('',
(r'^debuginfo/$', views.debug),
)
この例では、URLリンク/debuginfo/は、あなたのDEBUGプロファイルがTrueに設定されている場合にのみ有効です.