在Django應用程序的標準urls.py
,如果我通過一個app_name
沒有namespace
爲include()
呼叫,象下面這樣:爲什麼在包含另一個URLconf時不能傳遞`app_name`關鍵字arg?
urlpatterns = [
# ...
url(r'^', include('foo.urls', app_name='foo')),
# ...
]
我得到一個錯誤,如擊中包含一個URL時以下。
ValueError: Must specify a namespace if specifying app_name.
所以有必要做的事:
urlpatterns = [
# ...
url(r'^', include('foo.urls', namespace='foo-urls', app_name='foo')),
# ...
]
我看不出兩者之間的硬依賴;爲什麼有必要指定namespace
以便能夠指定app_name
?
嗯,聽起來像Django的官方文檔有所有的答案:https://docs.djangoproject.com/en/1.9/topics/http/urls/#url-namespaces –
請參閱[#17716](https:// code.djangoproject.com/ticket/17716)。另請注意,不推薦使用'app_name'參數。在1.9+中,你應該在'foo.urls'中設置一個'app_name'屬性,它不需要你設置'namespace'參數。你所看到的錯誤大多是它過去如何工作的人爲因素,而且無論如何也不會改變它。 – knbk
@knbk有道理,我應該提到我正在使用Django 1.8(.12)@ shang-wang我沒有看到明確的解釋。想要只使用'app_name'的原因是我有一個第三方庫,我懷疑是通過給它一個「命名空間」(默認情況下它沒有一個),所以它將是有用的附加一個'app_name'到它的URL,這將過濾來自該庫的'ResolverMatch'對象更容易。雖然從再次閱讀文檔,我的理解是'app_name'就像是一個「默認命名空間」,所以它可能無法達到我想要的效果 –