django - URL 命名空间的真实示例

标签 django url namespaces django-views

我正在研究Django的文档,但是我遇到了一个我无法理解的部分:what is a real example of how use to use a namespace in a real problem。我知道语法,但我不知道这样做的目的。

最佳答案

通常,它们用于将每个应用程序的 URL 放入它们自己的命名空间中。这可以防止 reverse() Django 函数和 {% url %} 模板函数返回错误的 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'),
)

现在我的 views.py 可以调用 reverse("hosts:list") 来获取调用 hosts.views.show_hosts 的页面的 URL,它看起来类似于 "/hosts/" 。模板中的 {% url "hosts:list" %} 也是如此。这样我就不必担心与另一个应用程序中名为“list”的 URL 发生冲突,也不必在每个名称前加上 hosts_ 前缀。

请注意,登录页面位于 {% url "login" %},因为它没有被赋予命名空间。

关于django - URL 命名空间的真实示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19171570/

相关文章:

django - 为什么 Django 模型的内部 Meta 类受到限制?

Django - 模板标签中的 verbose_name

flutter - 如何从我的 Flutter 代码中打开 Web 浏览器 (URL)?

.htaccess - 将 URL 查询字符串替换为斜杠以获得友好的 URL

javascript - 如何在输入 ID 等于 'submit' 的情况下提交 javascript

react-native - 在 React Native 应用程序中使用排版命名空间的最佳方法是什么

python - 如何在 Django 中获取登录用户 ID

python - Django - 使用事务原子回滚保存

url - "+"或 "-"作为 URL 中的分隔符?

python从另一个文件加载类名总是失败