繁体   English   中英

如何在django中获取视图函数的url路径

[英]How to get the url path of a view function in django

举个例子:

查看.py

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

网址.py

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

我想获取view1的 URL 路径。 我怎样才能做到这一点。 我想避免硬编码任何 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 模式并使用这些名称。

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

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

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

{% url 'path.to.some_view' v1 v2 %}

如果你想把 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 指定命名空间和名称,以使重构更容易。

通用方法

  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. 在输出文件urls.txt查找您的 URL
    {
        "url": "/v3/blockdocuments/<pk>/",
        "module": "api.views.ganeditor.BlockDocumentViewSet",
        "name": "block-documents-detail",
    },

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM