36

私はDjangoのドキュメントを勉強していますが、理解できない部分に遭遇しました.実際の問題で名前空間を使用する方法の実際の例は何ですか. 構文は知っていますが、これの目的がわかりません。

4

3 に答える 3

42

通常、これらは各アプリケーションの URL を独自の名前空間に配置するために使用されます。これにより、別のアプリで URL パターン名がたまたま一致したために、 reverse()Django 関数とテンプレート関数が間違った URL を返すことがなくなります。{% url %}

プロジェクトレベルのurls.pyファイルには次のものがあります。

from django.conf.urls.defaults import *
from django.conf import settings
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^$', 'main.views.main', name='main'),
    url(r'^login$', 'django.contrib.auth.views.login', name="login"),
    url(r'^logout$', 'django.contrib.auth.views.logout',
        {"next_page": "/"}, name="logout"),

# Admin
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

# Auto-add the applications.
for app in settings.LOCAL_APPS:
    urlpatterns += patterns('',
        url(r'^{0}/'.format(app), include(app + '.urls', namespace=app)),
    )

最後のセクションに注意してください: これは、私がインストールしたアプリケーションを通過し (settings.LOCAL_APPSは、私が追加した設定で、私のアプリのみを含みます。これはINSTALLED_APPS、South のような他のものを含む設定に追加されます)、urls.pyそれぞれで を探し、それらの URL をにインポートしますアプリにちなんだ名前の名前空間を作成し、それらの URL をアプリにちなんで名付けられた URL サブディレクトリに配置します。

たとえば、 という名前のアプリがあり、次のようになっているhostsとしhosts/urls.pyます。

from django.conf.urls.defaults import *

urlpatterns = patterns('hosts.views',
    url(r'^$', 'show_hosts', name='list'),
)

これで、を呼び出して を呼び出すページへの URL を取得views.pyできます。これは のようになります。同じことがテンプレートにも当てはまります。このようにして、別のアプリで「list」という名前の URL と衝突することを心配する必要がなく、すべての名前の前に.reverse("hosts:list")hosts.views.show_hosts"/hosts/"{% url "hosts:list" %}hosts_

{% url "login" %}名前空間が指定されていないため、ログイン ページは にあることに注意してください。

于 2013-10-04T01:23:03.953 に答える