私はDjangoのドキュメントを勉強していますが、理解できない部分に遭遇しました.実際の問題で名前空間を使用する方法の実際の例は何ですか. 構文は知っていますが、これの目的がわかりません。
3 に答える
通常、これらは各アプリケーションの 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" %}
名前空間が指定されていないため、ログイン ページは にあることに注意してください。