我一直在试图找出如何在Django URLConf中定义嵌套的URL名称空间(哪个look:like:this
)。
在这之前,我想好了如何创建一个基本的URL名称空间,并找到了this simple example snippet,其中包含了您可能放在urls.py
文件中的内容:
from django.conf.urls import patterns, include, url
# you can only define a namespace for urls when calling include():
app_patterns = patterns('',
url(r'^(?P<pk>[\w\-]+)/$', 'yourapp.views.your_view_function',
name="your-view"),
)
urlpatterns = patterns('',
url(r'^view-function/', include(app_patterns,
namespace='yournamespace', app_name='yourapp')),
)
"""
You can now use the namespace when you refer to the view, e.g. a call
to `reverse()`:
# yourapp/models.py
from django.core.urlresolvers import reverse
# ...
class MyModel(models.Model):
def get_absolute_url(self):
return reverse('signalqueue:exception-log-entry', kwargs=dict(pk=self.pk))
"""
。。。w/r/t在这种情况下,对其the Django documentation的推导毫无帮助。尽管Django的doc在所有其他方面都非常棒,而且这是规则的一个例外,但是关于定义嵌套URL名称空间的信息更少。
我想我应该问问是否有人拥有或知道一个定义嵌套名称空间的URLconf的直截了当和/或不言而喻的示例,他们可以共享,而不是发布我的尝试。
具体来说,我很好奇作为视图前缀的嵌套部分:是否需要安装Django应用程序?
})对于好奇的人来说,这里有一个(可能有些不可思议)的例子:http://imgur.com/NDn9H。我试着用红色和绿色打印出网址的底部,命名为testapp:views:<viewname>
,而不是testapp:<viewname>
。
它的工作相当直观。
include
具有另一个命名空间的urlconf将导致嵌套命名空间。这是一个很好的方式来保持网址的组织。我想我能给出的最好建议是记住
include
可以直接接受一个patterns
对象(如我的示例),它允许您使用单个urls.py
并将视图拆分为有用的名称空间,而不必创建多个url文件。更新2(2019-10-09)
正如eugene所说,UPDATE 1不再适用于Django的最新版本,后者要求在包含它时在
urls.py
中定义app_name
。On GitHub I've created a Django project(
myproject
)和几个应用程序(products
和books
)来演示如何创建嵌套命名空间。总之,各种urls.py
看起来如下:因此,您可以像这样使用这些嵌套的URL名称:
更新1
Django 2.0引入了两个相关的更改。首先,
urls()
函数现在在django.urls
中,因此上面的urls.py
示例的第一行是:其次,它引入了
path()
函数,作为不需要正则表达式的路径的更简单的替代方法。使用它,示例urls.py
如下:原始答案
虽然Yuji的答案是正确的,但是请注意,
django.conf.urls.patterns
不再存在(因为Django 1.10),而是使用普通列表。同样的例子
urls.py
现在应该是这样的:仍然像这样使用:
相关问题 更多 >
编程相关推荐