26

举个例子:

视图.py

def view1( request ):
    return HttpResponse( "just a test..." )

网址.py

urlpatterns = patterns('',
    url( r'^view1$', 'app1.view.view1'),
)

我想获取view1. 我怎样才能做到这一点。我想避免对任何 URL 路径进行硬编码,例如“xxx/view1”。

4

7 回答 7

44

你需要reverse.

from django.urls import reverse

reverse('app1.view.view1')

如果您想找出 URL 并重定向到它,请使用redirect

from django.urls import redirect 

redirect('app1.view.view1')

如果想要更进一步并且也不对视图名称进行硬编码,您可以命名您的 URL 模式并使用这些名称。

于 2012-05-10T11:49:43.497 回答
17

这取决于您是否要获取它,如果您想在视图(python 代码)中获取 url,您可以使用reverse函数(文档):

reverse('admin:app_list', kwargs={'app_label': 'auth'})

如果想在模板中使用它,那么您可以使用url标签(文档):

{% url 'path.to.some_view' v1 v2 %}
于 2012-05-10T11:53:27.603 回答
5

如果您希望将 view1 的 url 放入 view1 中,最好是 request.get_path()

于 2012-05-10T12:03:27.820 回答
4

正如其他人所说,reverse功能和url模板标签可以(应该)用于此目的。

我建议为您的 url 模式添加一个名称

urlpatterns = patterns('',
    url( r'^view1$', 'app1.view.view1', name='view1'),
)

并通过这个名字扭转它

reverse('view1')

这将使您的代码更容易重构

于 2012-05-10T12:04:40.157 回答
3

是的,你当然可以得到名为“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'))
于 2015-09-21T11:40:41.870 回答
1

您可以为此使用反向功能。您可以分别为 url-includes 和 urls 指定命名空间和名称,以使重构更容易。

于 2012-05-10T11:50:24.530 回答
1

通用方法

  1. 安装Django 扩展并将其添加到 INSTALLED_APPS

  2. 生成一个包含所有 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

  1. 在输出文件中查找您的 URLurls.txt
    {
        "url": "/v3/blockdocuments/<pk>/",
        "module": "api.views.ganeditor.BlockDocumentViewSet",
        "name": "block-documents-detail",
    },
于 2020-11-13T08:18:39.103 回答