举个例子:
视图.py
def view1( request ):
return HttpResponse( "just a test..." )
网址.py
urlpatterns = patterns('',
url( r'^view1$', 'app1.view.view1'),
)
我想获取view1
. 我怎样才能做到这一点。我想避免对任何 URL 路径进行硬编码,例如“xxx/view1”。
你需要reverse
.
from django.urls import reverse
reverse('app1.view.view1')
如果您想找出 URL 并重定向到它,请使用redirect
from django.urls import redirect
redirect('app1.view.view1')
如果想要更进一步并且也不对视图名称进行硬编码,您可以命名您的 URL 模式并使用这些名称。
如果您希望将 view1 的 url 放入 view1 中,最好是 request.get_path()
正如其他人所说,reverse
功能和url
模板标签可以(应该)用于此目的。
我建议为您的 url 模式添加一个名称
urlpatterns = patterns('',
url( r'^view1$', 'app1.view.view1', name='view1'),
)
并通过这个名字扭转它
reverse('view1')
这将使您的代码更容易重构
是的,你当然可以得到名为“view1”的视图的 url 路径,而无需对 url 进行硬编码。
您需要做的就是 - 只需从 Django urlresolvers 导入“反向”功能。
只需看下面的示例代码:
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
def some_redirect_fun(request):
return HttpResponseRedirect(reverse('view-name'))
您可以为此使用反向功能。您可以分别为 url-includes 和 urls 指定命名空间和名称,以使重构更容易。
通用方法
安装Django 扩展并将其添加到 INSTALLED_APPS
生成一个包含所有 URL 和相应视图函数的文本文件
./manage.py show_urls --format pretty-json --settings=<path-to-settings> > urls.txt
像
./manage.py show_urls --format pretty-json --settings=settings2.testing > urls.txt
urls.txt
{
"url": "/v3/blockdocuments/<pk>/",
"module": "api.views.ganeditor.BlockDocumentViewSet",
"name": "block-documents-detail",
},